diff options
author | Eric Andersen | 2001-07-19 22:28:02 +0000 |
---|---|---|
committer | Eric Andersen | 2001-07-19 22:28:02 +0000 |
commit | 20aab260e2f7011523402464fb079f48e5899890 (patch) | |
tree | f7822e652f54884459d525f57f1ef18c03a126f7 /coreutils/uudecode.c | |
parent | 0382eb886529fc4dab170e7d66883c20fe0e2883 (diff) | |
download | busybox-20aab260e2f7011523402464fb079f48e5899890.zip busybox-20aab260e2f7011523402464fb079f48e5899890.tar.gz |
Some adjustments, mostly from David McCullough <davidm@lineo.com> to
make busybox be more uClinux friendly. I also adjusted Config.h for
uClinux so it will automagically disable apps the arn't going to
work without fork() and such.
-Erik
Diffstat (limited to 'coreutils/uudecode.c')
-rw-r--r-- | coreutils/uudecode.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/coreutils/uudecode.c b/coreutils/uudecode.c index 6a3f78a..6ac9f1b 100644 --- a/coreutils/uudecode.c +++ b/coreutils/uudecode.c @@ -207,6 +207,8 @@ static int decode (const char *inname, char buf[2 * BUFSIZ]; char *outname; int do_base64 = 0; + int res; + int dofre; /* Search for header line. */ @@ -226,6 +228,7 @@ static int decode (const char *inname, } /* If the output file name is given on the command line this rules. */ + dofre = FALSE; if (forced_outname != NULL) outname = (char *) forced_outname; else { @@ -248,10 +251,11 @@ static int decode (const char *inname, } n = strlen (pw->pw_dir); n1 = strlen (p); - outname = (char *) alloca ((size_t) (n + n1 + 2)); + outname = (char *) xmalloc ((size_t) (n + n1 + 2)); memcpy (outname + n + 1, p, (size_t) (n1 + 1)); memcpy (outname, pw->pw_dir, (size_t) n); outname[n] = '/'; + dofre = TRUE; } } @@ -261,6 +265,8 @@ static int decode (const char *inname, || chmod (outname, mode & (S_IRWXU | S_IRWXG | S_IRWXO)) )) { perror_msg("%s", outname); /* */ + if (dofre) + free(outname); return FALSE; } @@ -269,9 +275,12 @@ static int decode (const char *inname, /* For each input line: */ if (do_base64) - return read_base64 (inname); + res = read_base64 (inname); else - return read_stduu (inname); + res = read_stduu (inname); + if (dofre) + free(outname); + return res; } int uudecode_main (int argc, |