diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2021-08-22 13:54:04 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2021-08-22 14:02:22 -0700 |
commit | 31226b9bbeadc32389a2e399f81fd0265ac88a57 (patch) | |
tree | 61f035694bc811533dc23a632ba8e0a55667d944 | |
parent | f2e2b4d3c3288e6cae3918fc432bdab8c0c485b7 (diff) | |
download | diffutils-31226b9bbeadc32389a2e399f81fd0265ac88a57.tar.gz |
diff: use mempcpy
* bootstrap.conf (gnulib_modules): Add mempcpy, stpcpy.
* src/ifdef.c (do_printf_spec):
* src/sdiff.c (expand_name, lf_snarf, temporary_file):
* src/util.c (message5):
Prefer mempcpy to memcpy plus manual size-updating.
Prefer stpcpy to mempcpy plus manual size-spec.
-rw-r--r-- | bootstrap.conf | 2 | ||||
-rw-r--r-- | src/ifdef.c | 5 | ||||
-rw-r--r-- | src/sdiff.c | 21 | ||||
-rw-r--r-- | src/util.c | 17 |
4 files changed, 22 insertions, 23 deletions
diff --git a/bootstrap.conf b/bootstrap.conf index f2359f6..b3c39e6 100644 --- a/bootstrap.conf +++ b/bootstrap.conf @@ -59,6 +59,7 @@ lstat maintainer-makefile manywarnings mbrtowc +mempcpy mkstemp mktime nstrftime @@ -73,6 +74,7 @@ stat stat-macros stat-time stdint +stpcpy strcase strptime strtoimax diff --git a/src/ifdef.c b/src/ifdef.c index d82d2d1..b82288f 100644 --- a/src/ifdef.c +++ b/src/ifdef.c @@ -362,9 +362,8 @@ do_printf_spec (FILE *out, char const *spec, size_t spec_prefix_len = f - spec - 2; size_t pI_len = sizeof pI - 1; char *format = xmalloca (spec_prefix_len + pI_len + 2); - char *p = format + spec_prefix_len + pI_len; - memcpy (format, spec, spec_prefix_len); - memcpy (format + spec_prefix_len, pI, pI_len); + char *p = mempcpy (format, spec, spec_prefix_len); + p = stpcpy (p, pI); *p++ = c; *p = '\0'; fprintf (out, format, value); diff --git a/src/sdiff.c b/src/sdiff.c index ab12987..f6011ce 100644 --- a/src/sdiff.c +++ b/src/sdiff.c @@ -337,10 +337,10 @@ expand_name (char *name, bool is_dir, char const *other_name) size_t namelen = strlen (name), baselen = base_len (base); bool insert_slash = *last_component (name) && name[namelen - 1] != '/'; char *r = xmalloc (namelen + insert_slash + baselen + 1); - memcpy (r, name, namelen); - r[namelen] = '/'; - memcpy (r + namelen + insert_slash, base, baselen); - r[namelen + insert_slash + baselen] = '\0'; + char *p = stpcpy (r, name); + *p = '/'; + p = mempcpy (p + insert_slash, base, baselen); + *p = '\0'; return r; } } @@ -429,17 +429,16 @@ lf_snarf (struct line_filter *lf, char *buffer, size_t bufsize) size_t s = next - start; if (bufsize <= s) return 0; - memcpy (buffer, start, s); + buffer = mempcpy (buffer, start, s); + bufsize -= s; if (next < lf->buflim) { - buffer[s] = 0; + *buffer = 0; lf->bufpos = next + 1; return 1; } if (! lf_refill (lf)) return s ? 0 : EOF; - buffer += s; - bufsize -= s; } } @@ -1163,10 +1162,8 @@ temporary_file (void) { char const *tmpdir = getenv (TMPDIR_ENV); char const *dir = tmpdir ? tmpdir : P_tmpdir; - size_t dirlen = strlen (dir); - char *buf = xmalloc (dirlen + 1 + 5 + 6 + 1); - memcpy (buf, dir, dirlen); - strcpy (buf + dirlen, "/sdiffXXXXXX"); + char *buf = xmalloc (strlen (dir) + 1 + 5 + 6 + 1); + strcpy (stpcpy (buf, dir), "/sdiffXXXXXX"); int fd = mkstemp (buf); if (fd < 0) free (buf); @@ -107,8 +107,6 @@ message5 (char const *format_msgid, char const *arg1, char const *arg2, { char *p; char const *arg[5]; - int i; - size_t size[5]; size_t total_size = offsetof (struct msg, args); struct msg *new; @@ -118,13 +116,17 @@ message5 (char const *format_msgid, char const *arg1, char const *arg2, arg[3] = arg3 ? arg3 : ""; arg[4] = arg4 ? arg4 : ""; - for (i = 0; i < 5; i++) - total_size += size[i] = strlen (arg[i]) + 1; + for (int i = 0; i < 5; i++) + total_size += strlen (arg[i]) + 1; new = xmalloc (total_size); - for (i = 0, p = new->args; i < 5; p += size[i++]) - memcpy (p, arg[i], size[i]); + p = new->args; + for (int i = 0; i < 5; i++) + { + p = stpcpy (p, arg[i]); + *p++ = 0; + } *msg_chain_end = new; new->next = 0; @@ -578,14 +580,13 @@ parse_diff_color (void) const char *p; /* Pointer to character being parsed */ char *buf; /* color_buf buffer pointer */ int ind_no; /* Indicator number */ - char label[3]; /* Indicator label */ + char label[] = "??"; /* Indicator label */ struct color_ext_type *ext; /* Extension we are working on */ if ((p = color_palette) == NULL || *p == '\0') return; ext = NULL; - strcpy (label, "??"); /* This is an overly conservative estimate, but any possible --palette string will *not* generate a color_buf longer than |