diff options
-rw-r--r-- | include/extern.h | 4 | ||||
-rw-r--r-- | src/send.c | 30 |
2 files changed, 32 insertions, 2 deletions
diff --git a/include/extern.h b/include/extern.h index e5b4e25d4..9fd206177 100644 --- a/include/extern.h +++ b/include/extern.h @@ -933,8 +933,8 @@ E void process(void); /**** send.c ****/ -E void send_cmd(const char *source, const char *fmt, ...) - FORMAT(printf,2,3); +E void send_cmd(const char *source, const char *fmt, ...) FORMAT(printf,2,3); +E void send_cmd(const std::string &source, const char *fmt, ...) FORMAT(printf,2,3); E void notice_server(char *source, Server * s, char *fmt, ...) FORMAT(printf,3,4); diff --git a/src/send.c b/src/send.c index 79e8f5e68..d99b08dab 100644 --- a/src/send.c +++ b/src/send.c @@ -51,6 +51,36 @@ void send_cmd(const char *source, const char *fmt, ...) va_end(args); } + +/* + * Copypasta version that accepts std::string source. +void send_cmd(const std::string &source, const char *fmt, ...) +{ + va_list args; + static char buf[BUFSIZE]; + + va_start(args, fmt); + + vsnprintf(buf, BUFSIZE - 1, fmt, args); + + if (!source.empty()) + { + sockprintf(servsock, ":%s %s\r\n", source.c_str(), buf); + eventprintf(":%s %s", source, buf); + if (debug) + alog("debug: Sent: :%s %s", source.c_str(), buf); + } + else + { + sockprintf(servsock, "%s\r\n", buf); + eventprintf("%s", buf); + if (debug) + alog("debug: Sent: %s", buf); + } + + va_end(args); +} + /*************************************************************************/ /** |