Hello,

In csh(1) the function blkfree() behaves like free(3) and
performs no action if its argument is NULL, so the caller
can avoid checking.

I lightly tested the following patch on i386 and amd64.
In two places the pointer was copied to a temporary
variable (v) before being passed to blkfree() which seemed
a bit awkward. Would anyone be willing to OK this?

- Michael


Index: csh.c
===================================================================
RCS file: /cvs/src/bin/csh/csh.c,v
retrieving revision 1.43
diff -u -p -u -r1.43 csh.c
--- csh.c       16 Dec 2017 10:27:21 -0000      1.43
+++ csh.c       29 Aug 2018 14:45:40 -0000
@@ -885,7 +885,6 @@ pintr(int notused)
 void
 pintr1(bool wantnl)
 {
-    Char **v;
     sigset_t sigset, osigset;
 
     sigemptyset(&sigset);
@@ -914,10 +913,10 @@ pintr1(bool wantnl)
     if (gointr) {
        gotolab(gointr);
        timflg = 0;
-       if ((v = pargv) != NULL)
-           pargv = 0, blkfree(v);
-       if ((v = gargv) != NULL)
-           gargv = 0, blkfree(v);
+       blkfree(pargv);
+       pargv = NULL;
+       blkfree(gargv);
+       gargv = NULL;
        reset();
     }
     else if (intty && wantnl) {
Index: dol.c
===================================================================
RCS file: /cvs/src/bin/csh/dol.c,v
retrieving revision 1.21
diff -u -p -u -r1.21 dol.c
--- dol.c       16 Dec 2017 10:27:21 -0000      1.21
+++ dol.c       29 Aug 2018 14:45:40 -0000
@@ -952,7 +952,7 @@ heredoc(Char *term)
                ocnt = BUFSIZ;
            }
        }
-       if (pargv)
-           blkfree(pargv), pargv = 0;
+       blkfree(pargv);
+       pargv = NULL;
     }
 }
Index: error.c
===================================================================
RCS file: /cvs/src/bin/csh/error.c,v
retrieving revision 1.13
diff -u -p -u -r1.13 error.c
--- error.c     16 Dec 2017 10:27:21 -0000      1.13
+++ error.c     29 Aug 2018 14:45:40 -0000
@@ -315,7 +315,6 @@ void
 stderror(int id, ...)
 {
     va_list va;
-    Char **v;
     int     flags = id & ERR_FLAGS;
 
     id &= ~ERR_FLAGS;
@@ -349,10 +348,10 @@ stderror(int id, ...)
     free(seterr);
     seterr = NULL;
 
-    if ((v = pargv) != NULL)
-       pargv = 0, blkfree(v);
-    if ((v = gargv) != NULL)
-       gargv = 0, blkfree(v);
+    blkfree(pargv);
+    pargv = NULL;
+    blkfree(gargv);
+    gargv = NULL;
 
     (void) fflush(cshout);
     (void) fflush(csherr);
Index: func.c
===================================================================
RCS file: /cvs/src/bin/csh/func.c,v
retrieving revision 1.37
diff -u -p -u -r1.37 func.c
--- func.c      18 Dec 2017 19:12:24 -0000      1.37
+++ func.c      29 Aug 2018 14:45:40 -0000
@@ -822,8 +822,7 @@ wfree(void)
            }
        }
 
-       if (wp->w_fe0)
-           blkfree(wp->w_fe0);
+       blkfree(wp->w_fe0);
        free(wp->w_fename);
        free(wp);
     }
@@ -886,8 +885,8 @@ xecho(int sep, Char **v)
        (void) fflush(cshout);
     if (setintr)
        sigprocmask(SIG_BLOCK, &sigset, NULL);
-    if (gargv)
-       blkfree(gargv), gargv = 0;
+       blkfree(gargv);
+       gargv = NULL;
 }
 
 void
@@ -1373,8 +1372,8 @@ doeval(Char **v, struct command *t)
     SHIN = dmove(saveIN, oSHIN);
     SHOUT = dmove(saveOUT, oSHOUT);
     SHERR = dmove(saveERR, oSHERR);
-    if (gv)
-       blkfree(gv), gv = NULL;
+    blkfree(gv);
+    gv = NULL;
     resexit(osetexit);
     gv = savegv;
     if (my_reenter)
Index: glob.c
===================================================================
RCS file: /cvs/src/bin/csh/glob.c,v
retrieving revision 1.22
diff -u -p -u -r1.22 glob.c
--- glob.c      26 Dec 2015 13:48:38 -0000      1.22
+++ glob.c      29 Aug 2018 14:45:40 -0000
@@ -578,9 +578,7 @@ dobackp(Char *cp, bool literal)
     Char *lp, *rp;
     Char   *ep, word[PATH_MAX];
 
-    if (pargv) {
-       blkfree(pargv);
-    }
+    blkfree(pargv);
     pargsiz = GLOBSPACE;
     pargv = xreallocarray(NULL, pargsiz, sizeof(Char *));
     pargv[0] = NULL;
Index: proc.c
===================================================================
RCS file: /cvs/src/bin/csh/proc.c,v
retrieving revision 1.31
diff -u -p -u -r1.31 proc.c
--- proc.c      22 Jul 2017 09:37:21 -0000      1.31
+++ proc.c      29 Aug 2018 14:45:41 -0000
@@ -1073,8 +1073,8 @@ pkill(Char **v, int signum)
 cont:
        v++;
     }
-    if (gargv)
-       blkfree(gargv), gargv = 0;
+    blkfree(gargv);
+    gargv = NULL;
     sigprocmask(SIG_UNBLOCK, &sigset, NULL);
     if (err1)
        stderror(ERR_SILENT);

Reply via email to