diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2012-07-10 14:48:34 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2012-07-10 14:48:34 -0700 |
commit | e99a530f8cdca3ccd9e739cd092ed9865d12fe89 (patch) | |
tree | c2bef9f80ff9910be17757a83f61caed02146d0a /lib-src | |
parent | c59592b32f5b5808c12720bfd37ea73b473fa1db (diff) | |
download | emacs-e99a530f8cdca3ccd9e739cd092ed9865d12fe89.tar.gz emacs-e99a530f8cdca3ccd9e739cd092ed9865d12fe89.tar.bz2 emacs-e99a530f8cdca3ccd9e739cd092ed9865d12fe89.zip |
Simplify by avoiding confusing use of strncpy etc.
Diffstat (limited to 'lib-src')
-rw-r--r-- | lib-src/ChangeLog | 19 | ||||
-rw-r--r-- | lib-src/etags.c | 56 | ||||
-rw-r--r-- | lib-src/make-docfile.c | 2 | ||||
-rw-r--r-- | lib-src/movemail.c | 45 | ||||
-rw-r--r-- | lib-src/pop.c | 73 |
5 files changed, 79 insertions, 116 deletions
diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index bc7c5d7114d..449985966a4 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -1,3 +1,22 @@ +2012-07-10 Paul Eggert <eggert@cs.ucla.edu> + + Simplify by avoiding confusing use of strncpy etc. + * etags.c (write_classname, C_entries): + Use sprintf rather than strncpy or strncat. + * etags.c (consider_token, C_entries, HTML_labels, Prolog_functions) + (Erlang_functions, substitute, readline_internal, savenstr): + * movemail.c (mail_spool_name): + Use memcpy rather than strncpy or strncat when either will do. + * make-docfile.c (write_c_args): + Use memcmp rather than strncmp when either will do. + * movemail.c (pop_retr): + * pop.c (pop_stat, pop_list, pop_multi_first, pop_last) + (socket_connection, pop_getline, sendline, getok): + Use snprintf rather than strncpy or strncat. + * movemail.c (concat): Remove; no longer needed. + (xmalloc): Define only if needed, now that concat has gone away. + Return void *. All uses changed. + 2012-07-09 Paul Eggert <eggert@cs.ucla.edu> Add GCC-style 'const' attribute to functions that can use it. diff --git a/lib-src/etags.c b/lib-src/etags.c index 7141811239f..69200b790fb 100644 --- a/lib-src/etags.c +++ b/lib-src/etags.c @@ -2642,17 +2642,11 @@ write_classname (linebuffer *cn, const char *qualifier) } for (i = 1; i < cstack.nl; i++) { - char *s; - int slen; - - s = cstack.cname[i]; + char *s = cstack.cname[i]; if (s == NULL) continue; - slen = strlen (s); - len += slen + qlen; - linebuffer_setlen (cn, len); - strncat (cn->buffer, qualifier, qlen); - strncat (cn->buffer, s, slen); + linebuffer_setlen (cn, len + qlen + strlen (s)); + len += sprintf (cn->buffer + len, "%s%s", qualifier, s); } } @@ -2867,7 +2861,7 @@ consider_token (register char *str, register int len, register int c, int *c_ext fvdef = fvnone; objdef = omethodtag; linebuffer_setlen (&token_name, len); - strncpy (token_name.buffer, str, len); + memcpy (token_name.buffer, str, len); token_name.buffer[len] = '\0'; return TRUE; } @@ -2879,10 +2873,11 @@ consider_token (register char *str, register int len, register int c, int *c_ext case omethodparm: if (parlev == 0) { + int oldlen = token_name.len; fvdef = fvnone; objdef = omethodtag; - linebuffer_setlen (&token_name, token_name.len + len); - strncat (token_name.buffer, str, len); + linebuffer_setlen (&token_name, oldlen + len); + memcpy (token_name.buffer + oldlen, str, len); return TRUE; } return FALSE; @@ -3311,12 +3306,12 @@ C_entries (int c_ext, FILE *inf) && nestlev > 0 && definedef == dnone) /* in struct body */ { + int len; write_classname (&token_name, qualifier); - linebuffer_setlen (&token_name, - token_name.len+qlen+toklen); - strcat (token_name.buffer, qualifier); - strncat (token_name.buffer, - newlb.buffer + tokoff, toklen); + len = token_name.len; + linebuffer_setlen (&token_name, len+qlen+toklen); + sprintf (token_name.buffer + len, "%s%.*s", + qualifier, toklen, newlb.buffer + tokoff); token.named = TRUE; } else if (objdef == ocatseen) @@ -3324,11 +3319,8 @@ C_entries (int c_ext, FILE *inf) { int len = strlen (objtag) + 2 + toklen; linebuffer_setlen (&token_name, len); - strcpy (token_name.buffer, objtag); - strcat (token_name.buffer, "("); - strncat (token_name.buffer, - newlb.buffer + tokoff, toklen); - strcat (token_name.buffer, ")"); + sprintf (token_name.buffer, "%s(%.*s)", + objtag, toklen, newlb.buffer + tokoff); token.named = TRUE; } else if (objdef == omethodtag @@ -3352,8 +3344,8 @@ C_entries (int c_ext, FILE *inf) len -= 1; } linebuffer_setlen (&token_name, len); - strncpy (token_name.buffer, - newlb.buffer + off, len); + memcpy (token_name.buffer, + newlb.buffer + off, len); token_name.buffer[len] = '\0'; if (defun) while (--len >= 0) @@ -3364,8 +3356,8 @@ C_entries (int c_ext, FILE *inf) else { linebuffer_setlen (&token_name, toklen); - strncpy (token_name.buffer, - newlb.buffer + tokoff, toklen); + memcpy (token_name.buffer, + newlb.buffer + tokoff, toklen); token_name.buffer[toklen] = '\0'; /* Name macros and members. */ token.named = (structdef == stagseen @@ -5161,7 +5153,7 @@ HTML_labels (FILE *inf) for (end = dbp; *end != '\0' && intoken (*end); end++) continue; linebuffer_setlen (&token_name, end - dbp); - strncpy (token_name.buffer, dbp, end - dbp); + memcpy (token_name.buffer, dbp, end - dbp); token_name.buffer[end - dbp] = '\0'; dbp = end; @@ -5261,7 +5253,7 @@ Prolog_functions (FILE *inf) else if (len + 1 > allocated) xrnew (last, len + 1, char); allocated = len + 1; - strncpy (last, cp, len); + memcpy (last, cp, len); last[len] = '\0'; } } @@ -5434,7 +5426,7 @@ Erlang_functions (FILE *inf) else if (len + 1 > allocated) xrnew (last, len + 1, char); allocated = len + 1; - strncpy (last, cp, len); + memcpy (last, cp, len); last[len] = '\0'; } } @@ -5817,7 +5809,7 @@ substitute (char *in, char *out, struct re_registers *regs) { dig = *out - '0'; diglen = regs->end[dig] - regs->start[dig]; - strncpy (t, in + regs->start[dig], diglen); + memcpy (t, in + regs->start[dig], diglen); t += diglen; } else @@ -6040,7 +6032,7 @@ readline_internal (linebuffer *lbp, register FILE *stream) filebuf.size *= 2; xrnew (filebuf.buffer, filebuf.size, char); } - strncpy (filebuf.buffer + filebuf.len, lbp->buffer, lbp->len); + memcpy (filebuf.buffer + filebuf.len, lbp->buffer, lbp->len); filebuf.len += lbp->len; filebuf.buffer[filebuf.len++] = '\n'; filebuf.buffer[filebuf.len] = '\0'; @@ -6263,7 +6255,7 @@ savenstr (const char *cp, int len) register char *dp; dp = xnew (len + 1, char); - strncpy (dp, cp, len); + memcpy (dp, cp, len); dp[len] = '\0'; return dp; } diff --git a/lib-src/make-docfile.c b/lib-src/make-docfile.c index 99c43da97f5..bd87b5b6524 100644 --- a/lib-src/make-docfile.c +++ b/lib-src/make-docfile.c @@ -541,7 +541,7 @@ write_c_args (FILE *out, char *func, char *buf, int minargs, int maxargs) /* In C code, `default' is a reserved word, so we spell it `defalt'; demangle that here. */ - if (ident_length == 6 && strncmp (ident_start, "defalt", 6) == 0) + if (ident_length == 6 && memcmp (ident_start, "defalt", 6) == 0) fprintf (out, "DEFAULT"); else while (ident_length-- > 0) diff --git a/lib-src/movemail.c b/lib-src/movemail.c index 3d994ec5a5e..b9a1be8a7f1 100644 --- a/lib-src/movemail.c +++ b/lib-src/movemail.c @@ -141,8 +141,9 @@ static _Noreturn void fatal (const char *s1, const char *s2, const char *s3); static void error (const char *s1, const char *s2, const char *s3); static _Noreturn void pfatal_with_name (char *name); static _Noreturn void pfatal_and_delete (char *name); -static char *concat (const char *s1, const char *s2, const char *s3); -static long *xmalloc (unsigned int size); +#ifdef MAIL_USE_MAILLOCK +static void *xmalloc (size_t size); +#endif #ifdef MAIL_USE_POP static int popmail (char *mailbox, char *outfile, int preserve, char *password, int reverse_order); static int pop_retr (popserver server, int msgno, FILE *arg); @@ -301,7 +302,7 @@ main (int argc, char **argv) inname_dirlen && !IS_DIRECTORY_SEP (inname[inname_dirlen - 1]); inname_dirlen--) continue; - tempname = (char *) xmalloc (inname_dirlen + sizeof "EXXXXXX"); + tempname = xmalloc (inname_dirlen + sizeof "EXXXXXX"); while (1) { @@ -583,8 +584,8 @@ mail_spool_name (char *inname) if (stat (MAILDIR, &stat1) < 0) return NULL; - indir = (char *) xmalloc (fname - inname + 1); - strncpy (indir, inname, fname - inname); + indir = xmalloc (fname - inname + 1); + memcpy (indir, inname, fname - inname); indir[fname-inname] = '\0'; @@ -644,32 +645,18 @@ pfatal_and_delete (char *name) fatal ("%s for %s", s, name); } -/* Return a newly-allocated string whose contents concatenate those of s1, s2, s3. */ - -static char * -concat (const char *s1, const char *s2, const char *s3) -{ - size_t len1 = strlen (s1), len2 = strlen (s2), len3 = strlen (s3); - char *result = (char *) xmalloc (len1 + len2 + len3 + 1); - - strcpy (result, s1); - strcpy (result + len1, s2); - strcpy (result + len1 + len2, s3); - *(result + len1 + len2 + len3) = 0; - - return result; -} - +#ifdef MAIL_USE_MAILLOCK /* Like malloc but get fatal error if memory is exhausted. */ -static long * -xmalloc (unsigned int size) +static void * +xmalloc (size_t size) { - long *result = (long *) malloc (size); + void *result = malloc (size); if (!result) fatal ("virtual memory exhausted", 0, 0); return result; } +#endif /* This is the guts of the interface to the Post Office Protocol. */ @@ -851,10 +838,7 @@ pop_retr (popserver server, int msgno, FILE *arg) if (pop_retrieve_first (server, msgno, &line)) { - char *msg = concat ("Error from POP server: ", pop_error, ""); - strncpy (Errmsg, msg, sizeof (Errmsg)); - Errmsg[sizeof (Errmsg)-1] = '\0'; - free (msg); + snprintf (Errmsg, sizeof Errmsg, "Error from POP server: %s", pop_error); return (NOTOK); } @@ -873,10 +857,7 @@ pop_retr (popserver server, int msgno, FILE *arg) if (ret) { - char *msg = concat ("Error from POP server: ", pop_error, ""); - strncpy (Errmsg, msg, sizeof (Errmsg)); - Errmsg[sizeof (Errmsg)-1] = '\0'; - free (msg); + snprintf (Errmsg, sizeof Errmsg, "Error from POP server: %s", pop_error); return (NOTOK); } diff --git a/lib-src/pop.c b/lib-src/pop.c index b8ed65c3eac..74054e0e1b1 100644 --- a/lib-src/pop.c +++ b/lib-src/pop.c @@ -340,10 +340,7 @@ pop_stat (popserver server, int *count, int *size) if (strncmp (fromserver, "+OK ", 4)) { if (0 == strncmp (fromserver, "-ERR", 4)) - { - strncpy (pop_error, fromserver, ERROR_MAX); - pop_error[ERROR_MAX-1] = '\0'; - } + snprintf (pop_error, ERROR_MAX, "%s", fromserver); else { strcpy (pop_error, @@ -444,10 +441,7 @@ pop_list (popserver server, int message, int **IDs, int **sizes) if (strncmp (fromserver, "+OK ", 4)) { if (! strncmp (fromserver, "-ERR", 4)) - { - strncpy (pop_error, fromserver, ERROR_MAX); - pop_error[ERROR_MAX-1] = '\0'; - } + snprintf (pop_error, ERROR_MAX, "%s", fromserver); else { strcpy (pop_error, @@ -686,8 +680,7 @@ pop_multi_first (popserver server, const char *command, char **response) if (0 == strncmp (*response, "-ERR", 4)) { - strncpy (pop_error, *response, ERROR_MAX); - pop_error[ERROR_MAX-1] = '\0'; + snprintf (pop_error, ERROR_MAX, "%s", *response); return (-1); } else if (0 == strncmp (*response, "+OK", 3)) @@ -860,8 +853,7 @@ pop_last (popserver server) if (! strncmp (fromserver, "-ERR", 4)) { - strncpy (pop_error, fromserver, ERROR_MAX); - pop_error[ERROR_MAX-1] = '\0'; + snprintf (pop_error, ERROR_MAX, "%s", fromserver); return (-1); } else if (strncmp (fromserver, "+OK ", 4)) @@ -1061,9 +1053,8 @@ socket_connection (char *host, int flags) sock = socket (PF_INET, SOCK_STREAM, 0); if (sock < 0) { - strcpy (pop_error, POP_SOCKET_ERROR); - strncat (pop_error, strerror (errno), - ERROR_MAX - sizeof (POP_SOCKET_ERROR)); + snprintf (pop_error, ERROR_MAX, "%s%s", + POP_SOCKET_ERROR, strerror (errno)); return (-1); } @@ -1139,9 +1130,7 @@ socket_connection (char *host, int flags) if (! connect_ok) { CLOSESOCKET (sock); - strcpy (pop_error, CONNECT_ERROR); - strncat (pop_error, strerror (errno), - ERROR_MAX - sizeof (CONNECT_ERROR)); + snprintf (pop_error, ERROR_MAX, "%s%s", CONNECT_ERROR, strerror (errno)); return (-1); } @@ -1159,9 +1148,8 @@ socket_connection (char *host, int flags) krb5_auth_con_free (kcontext, auth_context); if (kcontext) krb5_free_context (kcontext); - strcpy (pop_error, KRB_ERROR); - strncat (pop_error, error_message (rem), - ERROR_MAX - sizeof (KRB_ERROR)); + snprintf (pop_error, ERROR_MAX, "%s%s", + KRB_ERROR, error_message (rem)); CLOSESOCKET (sock); return (-1); } @@ -1199,30 +1187,19 @@ socket_connection (char *host, int flags) krb5_free_principal (kcontext, server); if (rem) { - strcpy (pop_error, KRB_ERROR); - strncat (pop_error, error_message (rem), - ERROR_MAX - sizeof (KRB_ERROR)); + int pop_error_len = snprintf (pop_error, ERROR_MAX, "%s%s", + KRB_ERROR, error_message (rem)); #if defined HAVE_KRB5_ERROR_TEXT if (err_ret && err_ret->text.length) { - strncat (pop_error, " [server says '", - ERROR_MAX - strlen (pop_error) - 1); - strncat (pop_error, err_ret->text.data, - min (ERROR_MAX - strlen (pop_error) - 1, - err_ret->text.length)); - strncat (pop_error, "']", - ERROR_MAX - strlen (pop_error) - 1); + int errlen = err_ret->text.length; + snprintf (pop_error + pop_error_len, ERROR_MAX - pop_error_len, + " [server says '.*%s']", errlen, err_ret->text.data); } #elif defined HAVE_KRB5_ERROR_E_TEXT - if (err_ret && err_ret->e_text && strlen (*err_ret->e_text)) - { - strncat (pop_error, " [server says '", - ERROR_MAX - strlen (pop_error) - 1); - strncat (pop_error, *err_ret->e_text, - ERROR_MAX - strlen (pop_error) - 1); - strncat (pop_error, "']", - ERROR_MAX - strlen (pop_error) - 1); - } + if (err_ret && err_ret->e_text && **err_ret->e_text) + snprintf (pop_error + pop_error_len, ERRMAX - pop_error_len, + " [server says '%s']", *err_ret->e_text); #endif if (err_ret) krb5_free_error (kcontext, err_ret); @@ -1243,9 +1220,7 @@ socket_connection (char *host, int flags) free ((char *) ticket); if (rem != KSUCCESS) { - strcpy (pop_error, KRB_ERROR); - strncat (pop_error, krb_err_txt[rem], - ERROR_MAX - sizeof (KRB_ERROR)); + snprintf (pop_error, ERROR_MAX, "%s%s", KRB_ERROR, krb_err_txt[rem]); CLOSESOCKET (sock); return (-1); } @@ -1350,9 +1325,8 @@ pop_getline (popserver server, char **line) server->buffer_size - server->data - 1, 0); if (ret < 0) { - strcpy (pop_error, GETLINE_ERROR); - strncat (pop_error, strerror (errno), - ERROR_MAX - sizeof (GETLINE_ERROR)); + snprintf (pop_error, ERROR_MAX, "%s%s", + GETLINE_ERROR, strerror (errno)); pop_trash (server); return (-1); } @@ -1436,9 +1410,7 @@ sendline (popserver server, const char *line) if (ret < 0) { pop_trash (server); - strcpy (pop_error, SENDLINE_ERROR); - strncat (pop_error, strerror (errno), - ERROR_MAX - sizeof (SENDLINE_ERROR)); + snprintf (pop_error, ERROR_MAX, "%s%s", SENDLINE_ERROR, strerror (errno)); return (ret); } @@ -1500,8 +1472,7 @@ getok (popserver server) return (0); else if (! strncmp (fromline, "-ERR", 4)) { - strncpy (pop_error, fromline, ERROR_MAX); - pop_error[ERROR_MAX-1] = '\0'; + snprintf (pop_error, ERROR_MAX, "%s", fromline); return (-1); } else |