diff options
author | Ray Lai <ray@cvs.openbsd.org> | 2008-04-26 19:58:04 +0000 |
---|---|---|
committer | Ray Lai <ray@cvs.openbsd.org> | 2008-04-26 19:58:04 +0000 |
commit | 90bab1cbf5f01344731ef8b28645a20e5c826dc2 (patch) | |
tree | 962ca981ea8ed516b00b5fc576c3bd578b510e56 /usr.bin/rcs/rcsprog.c | |
parent | 0d0e05efac0ccc59b1e2db2173290cc28ac1cbe7 (diff) |
Duplicate envstr and free it on error instead of allocating for
each argument and freeing each argument on error.
OK joris, tobias
Diffstat (limited to 'usr.bin/rcs/rcsprog.c')
-rw-r--r-- | usr.bin/rcs/rcsprog.c | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/usr.bin/rcs/rcsprog.c b/usr.bin/rcs/rcsprog.c index f8144985b1a..f1474281b4d 100644 --- a/usr.bin/rcs/rcsprog.c +++ b/usr.bin/rcs/rcsprog.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rcsprog.c,v 1.142 2008/04/24 19:16:49 tobias Exp $ */ +/* $OpenBSD: rcsprog.c,v 1.143 2008/04/26 19:58:03 ray Exp $ */ /* * Copyright (c) 2005 Jean-Francois Brousseau <jfb@openbsd.org> * All rights reserved. @@ -77,12 +77,10 @@ sighdlr(int sig) int rcs_init(char *envstr, char **argv, int argvlen) { - u_int i; int argc, error; - char linebuf[256], *lp, *cp; + char *linebuf, *lp, *cp; - if (strlcpy(linebuf, envstr, sizeof(linebuf)) >= sizeof(linebuf)) - errx(1, "rcs_init: string truncation"); + linebuf = xstrdup(envstr); (void)memset(argv, 0, argvlen * sizeof(char *)); error = argc = 0; @@ -98,13 +96,12 @@ rcs_init(char *envstr, char **argv, int argvlen) break; } - argv[argc] = xstrdup(cp); + argv[argc] = cp; argc++; } if (error != 0) { - for (i = 0; i < (u_int)argc; i++) - xfree(argv[i]); + xfree(linebuf); argc = -1; } |