aboutsummaryrefslogtreecommitdiffstats
path: root/lib-src
diff options
context:
space:
mode:
authorPaul Eggert2012-07-10 14:48:34 -0700
committerPaul Eggert2012-07-10 14:48:34 -0700
commite99a530f8cdca3ccd9e739cd092ed9865d12fe89 (patch)
treec2bef9f80ff9910be17757a83f61caed02146d0a /lib-src
parentc59592b32f5b5808c12720bfd37ea73b473fa1db (diff)
downloademacs-e99a530f8cdca3ccd9e739cd092ed9865d12fe89.tar.gz
emacs-e99a530f8cdca3ccd9e739cd092ed9865d12fe89.zip
Simplify by avoiding confusing use of strncpy etc.
Diffstat (limited to 'lib-src')
-rw-r--r--lib-src/ChangeLog19
-rw-r--r--lib-src/etags.c56
-rw-r--r--lib-src/make-docfile.c2
-rw-r--r--lib-src/movemail.c45
-rw-r--r--lib-src/pop.c73
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 @@
12012-07-10 Paul Eggert <eggert@cs.ucla.edu>
2
3 Simplify by avoiding confusing use of strncpy etc.
4 * etags.c (write_classname, C_entries):
5 Use sprintf rather than strncpy or strncat.
6 * etags.c (consider_token, C_entries, HTML_labels, Prolog_functions)
7 (Erlang_functions, substitute, readline_internal, savenstr):
8 * movemail.c (mail_spool_name):
9 Use memcpy rather than strncpy or strncat when either will do.
10 * make-docfile.c (write_c_args):
11 Use memcmp rather than strncmp when either will do.
12 * movemail.c (pop_retr):
13 * pop.c (pop_stat, pop_list, pop_multi_first, pop_last)
14 (socket_connection, pop_getline, sendline, getok):
15 Use snprintf rather than strncpy or strncat.
16 * movemail.c (concat): Remove; no longer needed.
17 (xmalloc): Define only if needed, now that concat has gone away.
18 Return void *. All uses changed.
19
12012-07-09 Paul Eggert <eggert@cs.ucla.edu> 202012-07-09 Paul Eggert <eggert@cs.ucla.edu>
2 21
3 Add GCC-style 'const' attribute to functions that can use it. 22 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)
2642 } 2642 }
2643 for (i = 1; i < cstack.nl; i++) 2643 for (i = 1; i < cstack.nl; i++)
2644 { 2644 {
2645 char *s; 2645 char *s = cstack.cname[i];
2646 int slen;
2647
2648 s = cstack.cname[i];
2649 if (s == NULL) 2646 if (s == NULL)
2650 continue; 2647 continue;
2651 slen = strlen (s); 2648 linebuffer_setlen (cn, len + qlen + strlen (s));
2652 len += slen + qlen; 2649 len += sprintf (cn->buffer + len, "%s%s", qualifier, s);
2653 linebuffer_setlen (cn, len);
2654 strncat (cn->buffer, qualifier, qlen);
2655 strncat (cn->buffer, s, slen);
2656 } 2650 }
2657} 2651}
2658 2652
@@ -2867,7 +2861,7 @@ consider_token (register char *str, register int len, register int c, int *c_ext
2867 fvdef = fvnone; 2861 fvdef = fvnone;
2868 objdef = omethodtag; 2862 objdef = omethodtag;
2869 linebuffer_setlen (&token_name, len); 2863 linebuffer_setlen (&token_name, len);
2870 strncpy (token_name.buffer, str, len); 2864 memcpy (token_name.buffer, str, len);
2871 token_name.buffer[len] = '\0'; 2865 token_name.buffer[len] = '\0';
2872 return TRUE; 2866 return TRUE;
2873 } 2867 }
@@ -2879,10 +2873,11 @@ consider_token (register char *str, register int len, register int c, int *c_ext
2879 case omethodparm: 2873 case omethodparm:
2880 if (parlev == 0) 2874 if (parlev == 0)
2881 { 2875 {
2876 int oldlen = token_name.len;
2882 fvdef = fvnone; 2877 fvdef = fvnone;
2883 objdef = omethodtag; 2878 objdef = omethodtag;
2884 linebuffer_setlen (&token_name, token_name.len + len); 2879 linebuffer_setlen (&token_name, oldlen + len);
2885 strncat (token_name.buffer, str, len); 2880 memcpy (token_name.buffer + oldlen, str, len);
2886 return TRUE; 2881 return TRUE;
2887 } 2882 }
2888 return FALSE; 2883 return FALSE;
@@ -3311,12 +3306,12 @@ C_entries (int c_ext, FILE *inf)
3311 && nestlev > 0 && definedef == dnone) 3306 && nestlev > 0 && definedef == dnone)
3312 /* in struct body */ 3307 /* in struct body */
3313 { 3308 {
3309 int len;
3314 write_classname (&token_name, qualifier); 3310 write_classname (&token_name, qualifier);
3315 linebuffer_setlen (&token_name, 3311 len = token_name.len;
3316 token_name.len+qlen+toklen); 3312 linebuffer_setlen (&token_name, len+qlen+toklen);
3317 strcat (token_name.buffer, qualifier); 3313 sprintf (token_name.buffer + len, "%s%.*s",
3318 strncat (token_name.buffer, 3314 qualifier, toklen, newlb.buffer + tokoff);
3319 newlb.buffer + tokoff, toklen);
3320 token.named = TRUE; 3315 token.named = TRUE;
3321 } 3316 }
3322 else if (objdef == ocatseen) 3317 else if (objdef == ocatseen)
@@ -3324,11 +3319,8 @@ C_entries (int c_ext, FILE *inf)
3324 { 3319 {
3325 int len = strlen (objtag) + 2 + toklen; 3320 int len = strlen (objtag) + 2 + toklen;
3326 linebuffer_setlen (&token_name, len); 3321 linebuffer_setlen (&token_name, len);
3327 strcpy (token_name.buffer, objtag); 3322 sprintf (token_name.buffer, "%s(%.*s)",
3328 strcat (token_name.buffer, "("); 3323 objtag, toklen, newlb.buffer + tokoff);
3329 strncat (token_name.buffer,
3330 newlb.buffer + tokoff, toklen);
3331 strcat (token_name.buffer, ")");
3332 token.named = TRUE; 3324 token.named = TRUE;
3333 } 3325 }
3334 else if (objdef == omethodtag 3326 else if (objdef == omethodtag
@@ -3352,8 +3344,8 @@ C_entries (int c_ext, FILE *inf)
3352 len -= 1; 3344 len -= 1;
3353 } 3345 }
3354 linebuffer_setlen (&token_name, len); 3346 linebuffer_setlen (&token_name, len);
3355 strncpy (token_name.buffer, 3347 memcpy (token_name.buffer,
3356 newlb.buffer + off, len); 3348 newlb.buffer + off, len);
3357 token_name.buffer[len] = '\0'; 3349 token_name.buffer[len] = '\0';
3358 if (defun) 3350 if (defun)
3359 while (--len >= 0) 3351 while (--len >= 0)
@@ -3364,8 +3356,8 @@ C_entries (int c_ext, FILE *inf)
3364 else 3356 else
3365 { 3357 {
3366 linebuffer_setlen (&token_name, toklen); 3358 linebuffer_setlen (&token_name, toklen);
3367 strncpy (token_name.buffer, 3359 memcpy (token_name.buffer,
3368 newlb.buffer + tokoff, toklen); 3360 newlb.buffer + tokoff, toklen);
3369 token_name.buffer[toklen] = '\0'; 3361 token_name.buffer[toklen] = '\0';
3370 /* Name macros and members. */ 3362 /* Name macros and members. */
3371 token.named = (structdef == stagseen 3363 token.named = (structdef == stagseen
@@ -5161,7 +5153,7 @@ HTML_labels (FILE *inf)
5161 for (end = dbp; *end != '\0' && intoken (*end); end++) 5153 for (end = dbp; *end != '\0' && intoken (*end); end++)
5162 continue; 5154 continue;
5163 linebuffer_setlen (&token_name, end - dbp); 5155 linebuffer_setlen (&token_name, end - dbp);
5164 strncpy (token_name.buffer, dbp, end - dbp); 5156 memcpy (token_name.buffer, dbp, end - dbp);
5165 token_name.buffer[end - dbp] = '\0'; 5157 token_name.buffer[end - dbp] = '\0';
5166 5158
5167 dbp = end; 5159 dbp = end;
@@ -5261,7 +5253,7 @@ Prolog_functions (FILE *inf)
5261 else if (len + 1 > allocated) 5253 else if (len + 1 > allocated)
5262 xrnew (last, len + 1, char); 5254 xrnew (last, len + 1, char);
5263 allocated = len + 1; 5255 allocated = len + 1;
5264 strncpy (last, cp, len); 5256 memcpy (last, cp, len);
5265 last[len] = '\0'; 5257 last[len] = '\0';
5266 } 5258 }
5267 } 5259 }
@@ -5434,7 +5426,7 @@ Erlang_functions (FILE *inf)
5434 else if (len + 1 > allocated) 5426 else if (len + 1 > allocated)
5435 xrnew (last, len + 1, char); 5427 xrnew (last, len + 1, char);
5436 allocated = len + 1; 5428 allocated = len + 1;
5437 strncpy (last, cp, len); 5429 memcpy (last, cp, len);
5438 last[len] = '\0'; 5430 last[len] = '\0';
5439 } 5431 }
5440 } 5432 }
@@ -5817,7 +5809,7 @@ substitute (char *in, char *out, struct re_registers *regs)
5817 { 5809 {
5818 dig = *out - '0'; 5810 dig = *out - '0';
5819 diglen = regs->end[dig] - regs->start[dig]; 5811 diglen = regs->end[dig] - regs->start[dig];
5820 strncpy (t, in + regs->start[dig], diglen); 5812 memcpy (t, in + regs->start[dig], diglen);
5821 t += diglen; 5813 t += diglen;
5822 } 5814 }
5823 else 5815 else
@@ -6040,7 +6032,7 @@ readline_internal (linebuffer *lbp, register FILE *stream)
6040 filebuf.size *= 2; 6032 filebuf.size *= 2;
6041 xrnew (filebuf.buffer, filebuf.size, char); 6033 xrnew (filebuf.buffer, filebuf.size, char);
6042 } 6034 }
6043 strncpy (filebuf.buffer + filebuf.len, lbp->buffer, lbp->len); 6035 memcpy (filebuf.buffer + filebuf.len, lbp->buffer, lbp->len);
6044 filebuf.len += lbp->len; 6036 filebuf.len += lbp->len;
6045 filebuf.buffer[filebuf.len++] = '\n'; 6037 filebuf.buffer[filebuf.len++] = '\n';
6046 filebuf.buffer[filebuf.len] = '\0'; 6038 filebuf.buffer[filebuf.len] = '\0';
@@ -6263,7 +6255,7 @@ savenstr (const char *cp, int len)
6263 register char *dp; 6255 register char *dp;
6264 6256
6265 dp = xnew (len + 1, char); 6257 dp = xnew (len + 1, char);
6266 strncpy (dp, cp, len); 6258 memcpy (dp, cp, len);
6267 dp[len] = '\0'; 6259 dp[len] = '\0';
6268 return dp; 6260 return dp;
6269} 6261}
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)
541 541
542 /* In C code, `default' is a reserved word, so we spell it 542 /* In C code, `default' is a reserved word, so we spell it
543 `defalt'; demangle that here. */ 543 `defalt'; demangle that here. */
544 if (ident_length == 6 && strncmp (ident_start, "defalt", 6) == 0) 544 if (ident_length == 6 && memcmp (ident_start, "defalt", 6) == 0)
545 fprintf (out, "DEFAULT"); 545 fprintf (out, "DEFAULT");
546 else 546 else
547 while (ident_length-- > 0) 547 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);
141static void error (const char *s1, const char *s2, const char *s3); 141static void error (const char *s1, const char *s2, const char *s3);
142static _Noreturn void pfatal_with_name (char *name); 142static _Noreturn void pfatal_with_name (char *name);
143static _Noreturn void pfatal_and_delete (char *name); 143static _Noreturn void pfatal_and_delete (char *name);
144static char *concat (const char *s1, const char *s2, const char *s3); 144#ifdef MAIL_USE_MAILLOCK
145static long *xmalloc (unsigned int size); 145static void *xmalloc (size_t size);
146#endif
146#ifdef MAIL_USE_POP 147#ifdef MAIL_USE_POP
147static int popmail (char *mailbox, char *outfile, int preserve, char *password, int reverse_order); 148static int popmail (char *mailbox, char *outfile, int preserve, char *password, int reverse_order);
148static int pop_retr (popserver server, int msgno, FILE *arg); 149static int pop_retr (popserver server, int msgno, FILE *arg);
@@ -301,7 +302,7 @@ main (int argc, char **argv)
301 inname_dirlen && !IS_DIRECTORY_SEP (inname[inname_dirlen - 1]); 302 inname_dirlen && !IS_DIRECTORY_SEP (inname[inname_dirlen - 1]);
302 inname_dirlen--) 303 inname_dirlen--)
303 continue; 304 continue;
304 tempname = (char *) xmalloc (inname_dirlen + sizeof "EXXXXXX"); 305 tempname = xmalloc (inname_dirlen + sizeof "EXXXXXX");
305 306
306 while (1) 307 while (1)
307 { 308 {
@@ -583,8 +584,8 @@ mail_spool_name (char *inname)
583 if (stat (MAILDIR, &stat1) < 0) 584 if (stat (MAILDIR, &stat1) < 0)
584 return NULL; 585 return NULL;
585 586
586 indir = (char *) xmalloc (fname - inname + 1); 587 indir = xmalloc (fname - inname + 1);
587 strncpy (indir, inname, fname - inname); 588 memcpy (indir, inname, fname - inname);
588 indir[fname-inname] = '\0'; 589 indir[fname-inname] = '\0';
589 590
590 591
@@ -644,32 +645,18 @@ pfatal_and_delete (char *name)
644 fatal ("%s for %s", s, name); 645 fatal ("%s for %s", s, name);
645} 646}
646 647
647/* Return a newly-allocated string whose contents concatenate those of s1, s2, s3. */ 648#ifdef MAIL_USE_MAILLOCK
648
649static char *
650concat (const char *s1, const char *s2, const char *s3)
651{
652 size_t len1 = strlen (s1), len2 = strlen (s2), len3 = strlen (s3);
653 char *result = (char *) xmalloc (len1 + len2 + len3 + 1);
654
655 strcpy (result, s1);
656 strcpy (result + len1, s2);
657 strcpy (result + len1 + len2, s3);
658 *(result + len1 + len2 + len3) = 0;
659
660 return result;
661}
662
663/* Like malloc but get fatal error if memory is exhausted. */ 649/* Like malloc but get fatal error if memory is exhausted. */
664 650
665static long * 651static void *
666xmalloc (unsigned int size) 652xmalloc (size_t size)
667{ 653{
668 long *result = (long *) malloc (size); 654 void *result = malloc (size);
669 if (!result) 655 if (!result)
670 fatal ("virtual memory exhausted", 0, 0); 656 fatal ("virtual memory exhausted", 0, 0);
671 return result; 657 return result;
672} 658}
659#endif
673 660
674/* This is the guts of the interface to the Post Office Protocol. */ 661/* This is the guts of the interface to the Post Office Protocol. */
675 662
@@ -851,10 +838,7 @@ pop_retr (popserver server, int msgno, FILE *arg)
851 838
852 if (pop_retrieve_first (server, msgno, &line)) 839 if (pop_retrieve_first (server, msgno, &line))
853 { 840 {
854 char *msg = concat ("Error from POP server: ", pop_error, ""); 841 snprintf (Errmsg, sizeof Errmsg, "Error from POP server: %s", pop_error);
855 strncpy (Errmsg, msg, sizeof (Errmsg));
856 Errmsg[sizeof (Errmsg)-1] = '\0';
857 free (msg);
858 return (NOTOK); 842 return (NOTOK);
859 } 843 }
860 844
@@ -873,10 +857,7 @@ pop_retr (popserver server, int msgno, FILE *arg)
873 857
874 if (ret) 858 if (ret)
875 { 859 {
876 char *msg = concat ("Error from POP server: ", pop_error, ""); 860 snprintf (Errmsg, sizeof Errmsg, "Error from POP server: %s", pop_error);
877 strncpy (Errmsg, msg, sizeof (Errmsg));
878 Errmsg[sizeof (Errmsg)-1] = '\0';
879 free (msg);
880 return (NOTOK); 861 return (NOTOK);
881 } 862 }
882 863
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)
340 if (strncmp (fromserver, "+OK ", 4)) 340 if (strncmp (fromserver, "+OK ", 4))
341 { 341 {
342 if (0 == strncmp (fromserver, "-ERR", 4)) 342 if (0 == strncmp (fromserver, "-ERR", 4))
343 { 343 snprintf (pop_error, ERROR_MAX, "%s", fromserver);
344 strncpy (pop_error, fromserver, ERROR_MAX);
345 pop_error[ERROR_MAX-1] = '\0';
346 }
347 else 344 else
348 { 345 {
349 strcpy (pop_error, 346 strcpy (pop_error,
@@ -444,10 +441,7 @@ pop_list (popserver server, int message, int **IDs, int **sizes)
444 if (strncmp (fromserver, "+OK ", 4)) 441 if (strncmp (fromserver, "+OK ", 4))
445 { 442 {
446 if (! strncmp (fromserver, "-ERR", 4)) 443 if (! strncmp (fromserver, "-ERR", 4))
447 { 444 snprintf (pop_error, ERROR_MAX, "%s", fromserver);
448 strncpy (pop_error, fromserver, ERROR_MAX);
449 pop_error[ERROR_MAX-1] = '\0';
450 }
451 else 445 else
452 { 446 {
453 strcpy (pop_error, 447 strcpy (pop_error,
@@ -686,8 +680,7 @@ pop_multi_first (popserver server, const char *command, char **response)
686 680
687 if (0 == strncmp (*response, "-ERR", 4)) 681 if (0 == strncmp (*response, "-ERR", 4))
688 { 682 {
689 strncpy (pop_error, *response, ERROR_MAX); 683 snprintf (pop_error, ERROR_MAX, "%s", *response);
690 pop_error[ERROR_MAX-1] = '\0';
691 return (-1); 684 return (-1);
692 } 685 }
693 else if (0 == strncmp (*response, "+OK", 3)) 686 else if (0 == strncmp (*response, "+OK", 3))
@@ -860,8 +853,7 @@ pop_last (popserver server)
860 853
861 if (! strncmp (fromserver, "-ERR", 4)) 854 if (! strncmp (fromserver, "-ERR", 4))
862 { 855 {
863 strncpy (pop_error, fromserver, ERROR_MAX); 856 snprintf (pop_error, ERROR_MAX, "%s", fromserver);
864 pop_error[ERROR_MAX-1] = '\0';
865 return (-1); 857 return (-1);
866 } 858 }
867 else if (strncmp (fromserver, "+OK ", 4)) 859 else if (strncmp (fromserver, "+OK ", 4))
@@ -1061,9 +1053,8 @@ socket_connection (char *host, int flags)
1061 sock = socket (PF_INET, SOCK_STREAM, 0); 1053 sock = socket (PF_INET, SOCK_STREAM, 0);
1062 if (sock < 0) 1054 if (sock < 0)
1063 { 1055 {
1064 strcpy (pop_error, POP_SOCKET_ERROR); 1056 snprintf (pop_error, ERROR_MAX, "%s%s",
1065 strncat (pop_error, strerror (errno), 1057 POP_SOCKET_ERROR, strerror (errno));
1066 ERROR_MAX - sizeof (POP_SOCKET_ERROR));
1067 return (-1); 1058 return (-1);
1068 1059
1069 } 1060 }
@@ -1139,9 +1130,7 @@ socket_connection (char *host, int flags)
1139 if (! connect_ok) 1130 if (! connect_ok)
1140 { 1131 {
1141 CLOSESOCKET (sock); 1132 CLOSESOCKET (sock);
1142 strcpy (pop_error, CONNECT_ERROR); 1133 snprintf (pop_error, ERROR_MAX, "%s%s", CONNECT_ERROR, strerror (errno));
1143 strncat (pop_error, strerror (errno),
1144 ERROR_MAX - sizeof (CONNECT_ERROR));
1145 return (-1); 1134 return (-1);
1146 1135
1147 } 1136 }
@@ -1159,9 +1148,8 @@ socket_connection (char *host, int flags)
1159 krb5_auth_con_free (kcontext, auth_context); 1148 krb5_auth_con_free (kcontext, auth_context);
1160 if (kcontext) 1149 if (kcontext)
1161 krb5_free_context (kcontext); 1150 krb5_free_context (kcontext);
1162 strcpy (pop_error, KRB_ERROR); 1151 snprintf (pop_error, ERROR_MAX, "%s%s",
1163 strncat (pop_error, error_message (rem), 1152 KRB_ERROR, error_message (rem));
1164 ERROR_MAX - sizeof (KRB_ERROR));
1165 CLOSESOCKET (sock); 1153 CLOSESOCKET (sock);
1166 return (-1); 1154 return (-1);
1167 } 1155 }
@@ -1199,30 +1187,19 @@ socket_connection (char *host, int flags)
1199 krb5_free_principal (kcontext, server); 1187 krb5_free_principal (kcontext, server);
1200 if (rem) 1188 if (rem)
1201 { 1189 {
1202 strcpy (pop_error, KRB_ERROR); 1190 int pop_error_len = snprintf (pop_error, ERROR_MAX, "%s%s",
1203 strncat (pop_error, error_message (rem), 1191 KRB_ERROR, error_message (rem));
1204 ERROR_MAX - sizeof (KRB_ERROR));
1205#if defined HAVE_KRB5_ERROR_TEXT 1192#if defined HAVE_KRB5_ERROR_TEXT
1206 if (err_ret && err_ret->text.length) 1193 if (err_ret && err_ret->text.length)
1207 { 1194 {
1208 strncat (pop_error, " [server says '", 1195 int errlen = err_ret->text.length;
1209 ERROR_MAX - strlen (pop_error) - 1); 1196 snprintf (pop_error + pop_error_len, ERROR_MAX - pop_error_len,
1210 strncat (pop_error, err_ret->text.data, 1197 " [server says '.*%s']", errlen, err_ret->text.data);
1211 min (ERROR_MAX - strlen (pop_error) - 1,
1212 err_ret->text.length));
1213 strncat (pop_error, "']",
1214 ERROR_MAX - strlen (pop_error) - 1);
1215 } 1198 }
1216#elif defined HAVE_KRB5_ERROR_E_TEXT 1199#elif defined HAVE_KRB5_ERROR_E_TEXT
1217 if (err_ret && err_ret->e_text && strlen (*err_ret->e_text)) 1200 if (err_ret && err_ret->e_text && **err_ret->e_text)
1218 { 1201 snprintf (pop_error + pop_error_len, ERRMAX - pop_error_len,
1219 strncat (pop_error, " [server says '", 1202 " [server says '%s']", *err_ret->e_text);
1220 ERROR_MAX - strlen (pop_error) - 1);
1221 strncat (pop_error, *err_ret->e_text,
1222 ERROR_MAX - strlen (pop_error) - 1);
1223 strncat (pop_error, "']",
1224 ERROR_MAX - strlen (pop_error) - 1);
1225 }
1226#endif 1203#endif
1227 if (err_ret) 1204 if (err_ret)
1228 krb5_free_error (kcontext, err_ret); 1205 krb5_free_error (kcontext, err_ret);
@@ -1243,9 +1220,7 @@ socket_connection (char *host, int flags)
1243 free ((char *) ticket); 1220 free ((char *) ticket);
1244 if (rem != KSUCCESS) 1221 if (rem != KSUCCESS)
1245 { 1222 {
1246 strcpy (pop_error, KRB_ERROR); 1223 snprintf (pop_error, ERROR_MAX, "%s%s", KRB_ERROR, krb_err_txt[rem]);
1247 strncat (pop_error, krb_err_txt[rem],
1248 ERROR_MAX - sizeof (KRB_ERROR));
1249 CLOSESOCKET (sock); 1224 CLOSESOCKET (sock);
1250 return (-1); 1225 return (-1);
1251 } 1226 }
@@ -1350,9 +1325,8 @@ pop_getline (popserver server, char **line)
1350 server->buffer_size - server->data - 1, 0); 1325 server->buffer_size - server->data - 1, 0);
1351 if (ret < 0) 1326 if (ret < 0)
1352 { 1327 {
1353 strcpy (pop_error, GETLINE_ERROR); 1328 snprintf (pop_error, ERROR_MAX, "%s%s",
1354 strncat (pop_error, strerror (errno), 1329 GETLINE_ERROR, strerror (errno));
1355 ERROR_MAX - sizeof (GETLINE_ERROR));
1356 pop_trash (server); 1330 pop_trash (server);
1357 return (-1); 1331 return (-1);
1358 } 1332 }
@@ -1436,9 +1410,7 @@ sendline (popserver server, const char *line)
1436 if (ret < 0) 1410 if (ret < 0)
1437 { 1411 {
1438 pop_trash (server); 1412 pop_trash (server);
1439 strcpy (pop_error, SENDLINE_ERROR); 1413 snprintf (pop_error, ERROR_MAX, "%s%s", SENDLINE_ERROR, strerror (errno));
1440 strncat (pop_error, strerror (errno),
1441 ERROR_MAX - sizeof (SENDLINE_ERROR));
1442 return (ret); 1414 return (ret);
1443 } 1415 }
1444 1416
@@ -1500,8 +1472,7 @@ getok (popserver server)
1500 return (0); 1472 return (0);
1501 else if (! strncmp (fromline, "-ERR", 4)) 1473 else if (! strncmp (fromline, "-ERR", 4))
1502 { 1474 {
1503 strncpy (pop_error, fromline, ERROR_MAX); 1475 snprintf (pop_error, ERROR_MAX, "%s", fromline);
1504 pop_error[ERROR_MAX-1] = '\0';
1505 return (-1); 1476 return (-1);
1506 } 1477 }
1507 else 1478 else