From 2b0108adf6ec666d6f5e4a38cac2d4314a8e2cb5 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Fri, 21 Dec 2012 19:23:44 +0100 Subject: [PATCH] MINOR: log: add lf_text_len This function allows to log a text of a specific length. --- include/proto/log.h | 2 +- src/log.c | 71 ++++++++++++++++++--------------------------- 2 files changed, 30 insertions(+), 43 deletions(-) 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 -- 2.39.5