ping.
On Thu, Aug 30, 2018 at 12:20:37AM +0800, Michael Mikonos wrote:
> 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);