diff options
author | Jeff King <peff@peff.net> | 2015-09-24 17:08:26 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2015-10-05 11:08:06 -0700 |
commit | eddda371449ba925d91d04c615d084adf1b43a33 (patch) | |
tree | a19c2df8b4502c0191e5261ca12ea5d0c6f8601a | |
parent | 02e32b7debbcbe5910c11a515801751b349577d7 (diff) | |
download | git-eddda371449ba925d91d04c615d084adf1b43a33.tar.gz |
convert strncpy to memcpy
strncpy is known to be a confusing function because of its
termination semantics. These calls are all correct, but it
takes some examination to see why. In particular, every one
of them expects to copy up to the length limit, and then
makes some arrangement for terminating the result.
We can just use memcpy, along with noting explicitly how the
result is terminated (if it is not already obvious). That
should make it more clear to a reader that we are doing the
right thing.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | builtin/help.c | 4 | ||||
-rw-r--r-- | fast-import.c | 2 | ||||
-rw-r--r-- | tag.c | 2 |
3 files changed, 4 insertions, 4 deletions
diff --git a/builtin/help.c b/builtin/help.c index e1650ab3f9..1cd0c1ee44 100644 --- a/builtin/help.c +++ b/builtin/help.c @@ -176,7 +176,7 @@ static void add_man_viewer(const char *name) while (*p) p = &((*p)->next); *p = xcalloc(1, (sizeof(**p) + len + 1)); - strncpy((*p)->name, name, len); + memcpy((*p)->name, name, len); /* NUL-terminated by xcalloc */ } static int supported_man_viewer(const char *name, size_t len) @@ -192,7 +192,7 @@ static void do_add_man_viewer_info(const char *name, { struct man_viewer_info_list *new = xcalloc(1, sizeof(*new) + len + 1); - strncpy(new->name, name, len); + memcpy(new->name, name, len); /* NUL-terminated by xcalloc */ new->info = xstrdup(value); new->next = man_viewer_info_list; man_viewer_info_list = new; diff --git a/fast-import.c b/fast-import.c index cf6d8bc0ce..4d01efcb9d 100644 --- a/fast-import.c +++ b/fast-import.c @@ -703,7 +703,7 @@ static struct atom_str *to_atom(const char *s, unsigned short len) c = pool_alloc(sizeof(struct atom_str) + len + 1); c->str_len = len; - strncpy(c->str_dat, s, len); + memcpy(c->str_dat, s, len); c->str_dat[len] = 0; c->next_atom = atom_table[hc]; atom_table[hc] = c; @@ -82,7 +82,7 @@ int parse_tag_buffer(struct tag *item, const void *data, unsigned long size) nl = memchr(bufptr, '\n', tail - bufptr); if (!nl || sizeof(type) <= (nl - bufptr)) return -1; - strncpy(type, bufptr, nl - bufptr); + memcpy(type, bufptr, nl - bufptr); type[nl - bufptr] = '\0'; bufptr = nl + 1; |