From mboxrd@z Thu Jan 1 00:00:00 1970 From: Steven Whitehouse Date: Fri, 25 Apr 2014 12:25:04 +0100 Subject: [Cluster-devel] [PATCH] dlm_controld: fix name printing error in logging In-Reply-To: <1398410508-6198-1-git-send-email-lzhong@suse.com> References: <1398410508-6198-1-git-send-email-lzhong@suse.com> Message-ID: <535A4610.6090909@redhat.com> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Hi, On 25/04/14 08:21, Lidong Zhong wrote: > When the length of name_in is NAME_ID_SIZE, the last byte of the name > and a whitespace will get lost. > > Signed-off-by: Lidong Zhong > --- > dlm_controld/logging.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/dlm_controld/logging.c b/dlm_controld/logging.c > index 9347e43..ea879e8 100644 > --- a/dlm_controld/logging.c > +++ b/dlm_controld/logging.c > @@ -122,7 +122,7 @@ static void log_save_str(int len, char *log_buf, unsigned int *point, > void log_level(char *name_in, uint32_t level_in, const char *fmt, ...) > { > va_list ap; > - char name[NAME_ID_SIZE + 1]; > + char name[NAME_ID_SIZE + 2]; > uint32_t level = level_in & 0x0000FFFF; > uint32_t extra = level_in & 0xFFFF0000; > int ret, pos = 0; > @@ -132,7 +132,7 @@ void log_level(char *name_in, uint32_t level_in, const char *fmt, ...) > memset(name, 0, sizeof(name)); > > if (name_in) > - snprintf(name, NAME_ID_SIZE, "%s ", name_in); > + snprintf(name, NAME_ID_SIZE + 2, "%s ", name_in); > > ret = snprintf(log_str + pos, len - pos, "%llu %s", > (unsigned long long)monotime(), name); It seems a bit odd to use a temporary buffer here... why not just print the name directly in the second snprintf() call? Something like this: if (name_in) ret = snprintf(log_str + pos, len - pos, "%llu %s ", (unsigned long long)monotime(), name_in); else ret = snprintf(log_str + pos, len - pos, "%llu ", (unsigned long long)monotime()); Or even: ret = snprintf(log_str + pos, len - pos, name_in ? "%llu %s " : "%llu ", (unsigned long long)monotime(), name_in); Steve.