summaryrefslogtreecommitdiff
path: root/coreutils/uudecode.c
diff options
context:
space:
mode:
authorEric Andersen2001-07-19 22:28:02 +0000
committerEric Andersen2001-07-19 22:28:02 +0000
commit20aab260e2f7011523402464fb079f48e5899890 (patch)
treef7822e652f54884459d525f57f1ef18c03a126f7 /coreutils/uudecode.c
parent0382eb886529fc4dab170e7d66883c20fe0e2883 (diff)
downloadbusybox-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.c15
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,