From: Willy Tarreau Date: Fri, 21 Dec 2012 18:23:44 +0000 (+0100) Subject: MINOR: log: add lf_text_len X-Git-Tag: v1.5-dev16~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2b0108ad;p=thirdparty%2Fhaproxy.git MINOR: log: add lf_text_len This function allows to log a text of a specific length. --- diff --git a/include/proto/log.h b/include/proto/log.h index 5d1215afb9..173375e4e2 100644 --- a/include/proto/log.h +++ b/include/proto/log.h @@ -122,7 +122,7 @@ int get_log_facility(const char *fac); * * Return the adress of the \0 character, or NULL on error */ -char *lf_text(char *dst, const char *src, size_t size, struct logformat_node *node); +char *lf_text_len(char *dst, const char *src, size_t len, size_t size, struct logformat_node *node); /* * Write a IP adress to the log string diff --git a/src/log.c b/src/log.c index a5860024e6..a1bc78fdc0 100644 --- a/src/log.c +++ b/src/log.c @@ -510,53 +510,40 @@ int get_log_facility(const char *fac) * * Return the adress of the \0 character, or NULL on error */ -char *lf_text(char *dst, const char *src, size_t size, struct logformat_node *node) +char *lf_text_len(char *dst, const char *src, size_t len, size_t size, struct logformat_node *node) { - int n; - - if (src == NULL || *src == '\0') { - if (node->options & LOG_OPT_QUOTE) { - if (size > 2) { - *(dst++) = '"'; - *(dst++) = '"'; - *dst = '\0'; - } else { - dst = NULL; - return dst; - } - } else { - if (size > 1) { - *(dst++) = '-'; - *dst = '\0'; - } else { // error no space available - dst = NULL; - return dst; - } - } - } else { - if (node->options & LOG_OPT_QUOTE) { - if (size-- > 1 ) { - *(dst++) = '"'; - } else { - dst = NULL; - return NULL; - } - n = strlcpy2(dst, src, size); - size -= n; - dst += n; - if (size > 1) { - *(dst++) = '"'; - *dst = '\0'; - } else { - dst = NULL; - } - } else { - dst += strlcpy2(dst, src, size); - } + if (size < 2) + return NULL; + + if (node->options & LOG_OPT_QUOTE) { + *(dst++) = '"'; + size--; + } + + if (src) { + if (++len > size) + len = size; + len = strlcpy2(dst, src, len); + + size -= len; + dst += len; } + + if (node->options & LOG_OPT_QUOTE) { + if (size < 2) + return NULL; + *(dst++) = '"'; + } + + *dst = '\0'; return dst; } +static inline char *lf_text(char *dst, const char *src, size_t size, struct logformat_node *node) +{ + return lf_text_len(dst, src, size, size, node); +} + /* * Write a IP adress to the log string * +X option write in hexadecimal notation, most signifant byte on the left