On 09/08/18 04:57, Michael Mikonos wrote: > Hello, > > The function strsave() in csh(1) is practically strdup(3). > The only difference is memory allocation failure results in > calling the stderror() error handler, which will later exit. > This patch makes the code (IMO) clearer by removing two loops. > xmalloc() behaves the same as xreallocarray() in terms of > calling stderror(). Does this look OK? > > - Michael > Why not use strdup(3) altogether then? This way it's even more clear what's intended. Maybe we should even rename the function to xstrdup?
martijn@ Index: misc.c =================================================================== RCS file: /cvs/src/bin/csh/misc.c,v retrieving revision 1.20 diff -u -p -r1.20 misc.c --- misc.c 20 Jun 2017 16:44:06 -0000 1.20 +++ misc.c 8 Sep 2018 08:10:34 -0000 @@ -34,6 +34,7 @@ #include <stdlib.h> #include <unistd.h> #include <stdarg.h> +#include <string.h> #include "csh.h" #include "extern.h" @@ -55,16 +56,14 @@ any(char *s, int c) char * strsave(char *s) { - char *n; - char *p; + char *n; if (s == NULL) s = ""; - for (p = s; *p++;) - continue; - n = p = xreallocarray(NULL, (p - s), sizeof(char)); - while ((*p++ = *s++) != '\0') - continue; + if ((n = strdup(s)) == NULL) { + child++; + stderror(ERR_NOMEM); + } return (n); }