svn commit: r223922 - head/usr.bin/rpcgen
Jilles Tjoelker
jilles at stack.nl
Fri Jul 15 20:34:36 UTC 2011
On Mon, Jul 11, 2011 at 05:31:53AM +0000, Xin LI wrote:
> Author: delphij
> Date: Mon Jul 11 05:31:52 2011
> New Revision: 223922
> URL: http://svn.freebsd.org/changeset/base/223922
> Log:
> Use strlcpy().
> MFC after: 1 month
It looks like the length is known in all four cases, so that memcpy()
can be used instead of strncpy() or strlcpy(), with explicitly assigning
a '\0' (like with the former strncpy()).
In particular, strlcpy()'s implicit strlen of the source operand is
wasteful here, particularly for input files with long lines. It also
adds a hidden dependency on *str being null-terminated, which is a bit
ugly even though it is satisfied and used elsewhere in the code.
> Modified:
> head/usr.bin/rpcgen/rpc_scan.c
> Modified: head/usr.bin/rpcgen/rpc_scan.c
> ==============================================================================
> --- head/usr.bin/rpcgen/rpc_scan.c Mon Jul 11 05:22:31 2011 (r223921)
> +++ head/usr.bin/rpcgen/rpc_scan.c Mon Jul 11 05:31:52 2011 (r223922)
> @@ -329,10 +329,9 @@ findstrconst(char **str, const char **va
> error("unterminated string constant");
> }
> p++;
> - size = p - *str;
> - tmp = xmalloc(size + 1);
> - (void) strncpy(tmp, *str, size);
> - tmp[size] = 0;
> + size = p - *str + 1;
> + tmp = xmalloc(size);
> + (void) strlcpy(tmp, *str, size);
> *val = tmp;
> *str = p;
> }
> @@ -352,13 +351,12 @@ findchrconst(char **str, const char **va
> error("unterminated string constant");
> }
> p++;
> - size = p - *str;
> - if (size != 3) {
> + size = p - *str + 1;
> + if (size != 4) {
> error("empty char string");
> }
> - tmp = xmalloc(size + 1);
> - (void) strncpy(tmp, *str, size);
> - tmp[size] = 0;
> + tmp = xmalloc(size);
> + (void) strlcpy(tmp, *str, size);
> *val = tmp;
> *str = p;
> }
> @@ -381,10 +379,9 @@ findconst(char **str, const char **val)
> p++;
> } while (isdigit(*p));
> }
> - size = p - *str;
> - tmp = xmalloc(size + 1);
> - (void) strncpy(tmp, *str, size);
> - tmp[size] = 0;
> + size = p - *str + 1;
> + tmp = xmalloc(size);
> + (void) strlcpy(tmp, *str, size);
> *val = tmp;
> *str = p;
> }
> @@ -438,8 +435,7 @@ findkind(char **mark, token *tokp)
> tokp->kind = TOK_IDENT;
> for (len = 0; isalnum(str[len]) || str[len] == '_'; len++);
> tmp = xmalloc(len + 1);
> - (void) strncpy(tmp, str, len);
> - tmp[len] = 0;
> + (void) strlcpy(tmp, str, len + 1);
> tokp->str = tmp;
> *mark = str + len;
> }
--
Jilles Tjoelker
More information about the svn-src-all
mailing list