From b739bfd572493886a5858244e49fb8646b00cb7f Mon Sep 17 00:00:00 2001 From: Andrew Bettison Date: Mon, 21 May 2012 00:08:31 +0930 Subject: [PATCH] Add catv() function --- log.c | 16 ++++++++++++++++ serval.h | 1 + 2 files changed, 17 insertions(+) diff --git a/log.c b/log.c index 955ccc9e..347ec7c3 100644 --- a/log.c +++ b/log.c @@ -18,6 +18,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "serval.h" +#include "strbuf.h" +#include int debug = 0; @@ -88,6 +90,20 @@ int dump(char *name, unsigned char *addr, int len) return 0; } +char *catv(const char *data, char *buf, size_t len) +{ + strbuf b = strbuf_local(buf, len); + for (; *data && !strbuf_overrun(b); ++data) { + if (*data == '\n') strbuf_puts(b, "\\n"); + else if (*data == '\r') strbuf_puts(b, "\\r"); + else if (*data == '\t') strbuf_puts(b, "\\t"); + else if (*data == '\\') strbuf_puts(b, "\\\\"); + else if (isprint(*data)) strbuf_putc(b, *data); + else strbuf_sprintf(b, "\\x%02x", *data); + } + return buf; +} + int dumpResponses(struct response_set *responses) { struct response *r; diff --git a/serval.h b/serval.h index 43651a01..b9b368bf 100755 --- a/serval.h +++ b/serval.h @@ -757,6 +757,7 @@ int setReason(char *fmt, ...); void logMessage(int level, char *fmt, ...); void vlogMessage(int level, char *fmt, va_list); long long debugFlagMask(const char *flagname); +char *catv(const char *data, char *buf, size_t len); int dump(char *name,unsigned char *addr,int len); #define FATALF(F,...) do { logMessage(LOG_LEVEL_FATAL, "%s:%d:%s() " F, __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__); exit(-1); } while(1)