{"thread":{"id":"33609","subject":"[PATCH 1/3] pretty: simplify input line length calculation in pp_user_info()","startedAt":"2013-04-25T19:40:25Z","lastAt":"2013-04-25T19:43:56Z","messageCount":3,"participants":["René Scharfe"],"isPatch":true,"patchVersion":1,"patchTotal":3},"messages":[{"id":"215483","messageId":"517986A9.4060506@lsrfire.ath.cx","threadId":"33609","inReplyTo":null,"subject":"[PATCH 1/3] pretty: simplify input line length calculation in pp_user_info()","fromName":"René Scharfe","fromEmail":"rene.scharfe@lsrfire.ath.cx","sentAt":"2013-04-25T19:40:25Z","receivedAt":"2013-04-25T19:40:25Z","isPatch":true,"sender":{"key":"l.s.r@web.de","avatar":"https://avatars.githubusercontent.com/u/26122331?v=4"},"body":"Instead of searching for LF and NUL with two strchr() calls use a single\nstrchrnul() call.  We don't need to check if the returned pointer is NULL\nbecause either we'll find the NUL at the end of line, or the caller\nforgot to NUL-terminate the string and we'll overrun the buffer in any\ncase.  Also we don't need to pass LF or NUL to split_ident_line() as it\nignores it anyway.\n\nSigned-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>\n---\n pretty.c | 13 ++-----------\n 1 file changed, 2 insertions(+), 11 deletions(-)\n\ndiff --git a/pretty.c b/pretty.c\nindex ba31481..e51c993 100644\n--- a/pretty.c\n+++ b/pretty.c\n@@ -413,7 +413,6 @@ void pp_user_info(const struct pretty_print_context *pp,\n \tstruct strbuf name;\n \tstruct strbuf mail;\n \tstruct ident_split ident;\n-\tint linelen;\n \tchar *line_end;\n \tconst char *mailbuf, *namebuf;\n \tsize_t namelen, maillen;\n@@ -422,18 +421,10 @@ void pp_user_info(const struct pretty_print_context *pp,\n \tif (pp->fmt == CMIT_FMT_ONELINE)\n \t\treturn;\n \n-\tline_end = strchr(line, '\\n');\n-\tif (!line_end) {\n-\t\tline_end = strchr(line, '\\0');\n-\t\tif (!line_end)\n-\t\t\treturn;\n-\t}\n-\n-\tlinelen = ++line_end - line;\n-\tif (split_ident_line(&ident, line, linelen))\n+\tline_end = strchrnul(line, '\\n');\n+\tif (split_ident_line(&ident, line, line_end - line))\n \t\treturn;\n \n-\n \tmailbuf = ident.mail_begin;\n \tmaillen = ident.mail_end - ident.mail_begin;\n \tnamebuf = ident.name_begin;\n-- \n1.8.2.1\n"},{"id":"215484","messageId":"51798705.7030108@lsrfire.ath.cx","threadId":"33609","inReplyTo":"517986A9.4060506@lsrfire.ath.cx","subject":"[PATCH 2/3] pretty: simplify output line length calculation in pp_user_info()","fromName":"René Scharfe","fromEmail":"rene.scharfe@lsrfire.ath.cx","sentAt":"2013-04-25T19:41:57Z","receivedAt":"2013-04-25T19:41:57Z","isPatch":true,"sender":{"key":"l.s.r@web.de","avatar":"https://avatars.githubusercontent.com/u/26122331?v=4"},"body":"Keep namelen unchanged and don't use it to hold a value that we're not\ninterested in anyway -- we can use maillen and the constant part\ndirectly instead.  This simplifies the code slightly and prepares for\nthe next patch that makes use of the original value of namelen.\n\nSigned-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>\n---\n pretty.c | 7 +++----\n 1 file changed, 3 insertions(+), 4 deletions(-)\n\ndiff --git a/pretty.c b/pretty.c\nindex e51c993..6861997 100644\n--- a/pretty.c\n+++ b/pretty.c\n@@ -439,8 +439,6 @@ void pp_user_info(const struct pretty_print_context *pp,\n \tstrbuf_add(&mail, mailbuf, maillen);\n \tstrbuf_add(&name, namebuf, namelen);\n \n-\tnamelen = name.len + mail.len + 3; /* ' ' + '<' + '>' */\n-\n \tif (pp->fmt == CMIT_FMT_EMAIL) {\n \t\tstrbuf_addstr(sb, \"From: \");\n \t\tif (needs_rfc2047_encoding(name.buf, name.len, RFC2047_ADDRESS)) {\n@@ -457,9 +455,10 @@ void pp_user_info(const struct pretty_print_context *pp,\n \t\t\tstrbuf_add_wrapped_bytes(sb, name.buf, name.len,\n \t\t\t\t\t\t -6, 1, max_length);\n \t\t}\n-\t\tif (namelen - name.len + last_line_length(sb) > max_length)\n-\t\t\tstrbuf_addch(sb, '\\n');\n \n+\t\tif (max_length <\n+\t\t    last_line_length(sb) + strlen(\" <\") + maillen + strlen(\">\"))\n+\t\t\tstrbuf_addch(sb, '\\n');\n \t\tstrbuf_addf(sb, \" <%s>\\n\", mail.buf);\n \t} else {\n \t\tstrbuf_addf(sb, \"%s: %.*s%s <%s>\\n\", what,\n-- \n1.8.2.1\n"},{"id":"215485","messageId":"5179877C.8000300@lsrfire.ath.cx","threadId":"33609","inReplyTo":"51798705.7030108@lsrfire.ath.cx","subject":"[PATCH 3/3] pretty: remove intermediate strbufs from pp_user_info()","fromName":"René Scharfe","fromEmail":"rene.scharfe@lsrfire.ath.cx","sentAt":"2013-04-25T19:43:56Z","receivedAt":"2013-04-25T19:43:56Z","isPatch":true,"sender":{"key":"l.s.r@web.de","avatar":"https://avatars.githubusercontent.com/u/26122331?v=4"},"body":"Use namebuf/namelen and mailbuf/maillen directly instead of copying\ntheir contents into strbufs first.\n\nSigned-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>\n---\n pretty.c | 29 +++++++++--------------------\n 1 file changed, 9 insertions(+), 20 deletions(-)\n\ndiff --git a/pretty.c b/pretty.c\nindex 6861997..9e43154 100644\n--- a/pretty.c\n+++ b/pretty.c\n@@ -410,8 +410,6 @@ void pp_user_info(const struct pretty_print_context *pp,\n \t\t  const char *what, struct strbuf *sb,\n \t\t  const char *line, const char *encoding)\n {\n-\tstruct strbuf name;\n-\tstruct strbuf mail;\n \tstruct ident_split ident;\n \tchar *line_end;\n \tconst char *mailbuf, *namebuf;\n@@ -433,42 +431,33 @@ void pp_user_info(const struct pretty_print_context *pp,\n \tif (pp->mailmap)\n \t\tmap_user(pp->mailmap, &mailbuf, &maillen, &namebuf, &namelen);\n \n-\tstrbuf_init(&mail, 0);\n-\tstrbuf_init(&name, 0);\n-\n-\tstrbuf_add(&mail, mailbuf, maillen);\n-\tstrbuf_add(&name, namebuf, namelen);\n-\n \tif (pp->fmt == CMIT_FMT_EMAIL) {\n \t\tstrbuf_addstr(sb, \"From: \");\n-\t\tif (needs_rfc2047_encoding(name.buf, name.len, RFC2047_ADDRESS)) {\n-\t\t\tadd_rfc2047(sb, name.buf, name.len,\n+\t\tif (needs_rfc2047_encoding(namebuf, namelen, RFC2047_ADDRESS)) {\n+\t\t\tadd_rfc2047(sb, namebuf, namelen,\n \t\t\t\t    encoding, RFC2047_ADDRESS);\n \t\t\tmax_length = 76; /* per rfc2047 */\n-\t\t} else if (needs_rfc822_quoting(name.buf, name.len)) {\n+\t\t} else if (needs_rfc822_quoting(namebuf, namelen)) {\n \t\t\tstruct strbuf quoted = STRBUF_INIT;\n-\t\t\tadd_rfc822_quoted(&quoted, name.buf, name.len);\n+\t\t\tadd_rfc822_quoted(&quoted, namebuf, namelen);\n \t\t\tstrbuf_add_wrapped_bytes(sb, quoted.buf, quoted.len,\n \t\t\t\t\t\t\t-6, 1, max_length);\n \t\t\tstrbuf_release(&quoted);\n \t\t} else {\n-\t\t\tstrbuf_add_wrapped_bytes(sb, name.buf, name.len,\n+\t\t\tstrbuf_add_wrapped_bytes(sb, namebuf, namelen,\n \t\t\t\t\t\t -6, 1, max_length);\n \t\t}\n \n \t\tif (max_length <\n \t\t    last_line_length(sb) + strlen(\" <\") + maillen + strlen(\">\"))\n \t\t\tstrbuf_addch(sb, '\\n');\n-\t\tstrbuf_addf(sb, \" <%s>\\n\", mail.buf);\n+\t\tstrbuf_addf(sb, \" <%.*s>\\n\", (int)maillen, mailbuf);\n \t} else {\n-\t\tstrbuf_addf(sb, \"%s: %.*s%s <%s>\\n\", what,\n-\t\t\t      (pp->fmt == CMIT_FMT_FULLER) ? 4 : 0,\n-\t\t\t      \"    \", name.buf, mail.buf);\n+\t\tstrbuf_addf(sb, \"%s: %.*s%.*s <%.*s>\\n\", what,\n+\t\t\t    (pp->fmt == CMIT_FMT_FULLER) ? 4 : 0, \"    \",\n+\t\t\t    (int)namelen, namebuf, (int)maillen, mailbuf);\n \t}\n \n-\tstrbuf_release(&mail);\n-\tstrbuf_release(&name);\n-\n \tswitch (pp->fmt) {\n \tcase CMIT_FMT_MEDIUM:\n \t\tstrbuf_addf(sb, \"Date:   %s\\n\",\n-- \n1.8.2.1\n"}]}