*/
-#include "busybox.h"
#include <stdio.h>
#include <errno.h>
#include <getopt.h>
+#include <string.h>
+#include <stdlib.h>
+#include "busybox.h"
+#include "pwd_grp/pwd.h"
+#include "pwd_grp/grp.h"
/*struct passwd *getpwnam();*/
char *p;
if (fgets (buf, sizeof(buf), stdin) == NULL) {
- error_msg("%s: Short file\n", inname);
+ error_msg("%s: Short file", inname);
return FALSE;
}
p = buf;
if (fgets (buf, sizeof(buf), stdin) == NULL
|| strcmp (buf, "end\n")) {
- error_msg("%s: No `end' line\n", inname);
+ error_msg("%s: No `end' line", inname);
return FALSE;
}
unsigned char *p;
if (fgets (buf, sizeof(buf), stdin) == NULL) {
- error_msg("%s: Short file\n", inname);
+ error_msg("%s: Short file", inname);
return FALSE;
}
p = buf;
if (memcmp (buf, "====", 4) == 0)
break;
if (last_data != 0) {
- error_msg("%s: data following `=' padding character\n", inname);
+ error_msg("%s: data following `=' padding character", inname);
return FALSE;
}
while ((b64_tab[*p] & '\100') != 0)
if (*p == '\n' || *p++ == '=') {
- error_msg("%s: illegal line\n", inname);
+ error_msg("%s: illegal line", inname);
return FALSE;
}
c2 = b64_tab[*p++];
while (b64_tab[*p] == '\177')
if (*p++ == '\n') {
- error_msg("%s: illegal line\n", inname);
+ error_msg("%s: illegal line", inname);
return FALSE;
}
if (*p == '=') {
while (b64_tab[*p] == '\177')
if (*p++ == '\n') {
- error_msg("%s: illegal line\n", inname);
+ error_msg("%s: illegal line", inname);
return FALSE;
}
putchar (c1 << 2 | c2 >> 4);
const char *forced_outname)
{
struct passwd *pw;
- register int n;
register char *p;
- int mode, n1;
+ int mode;
char buf[2 * BUFSIZ];
char *outname;
int do_base64 = 0;
+ int res;
+ int dofre;
/* Search for header line. */
while (1) {
if (fgets (buf, sizeof (buf), stdin) == NULL) {
- error_msg("%s: No `begin' line\n", inname);
+ error_msg("%s: No `begin' line", inname);
return FALSE;
}
}
/* If the output file name is given on the command line this rules. */
+ dofre = FALSE;
if (forced_outname != NULL)
outname = (char *) forced_outname;
else {
while (*p != '/')
++p;
if (*p == '\0') {
- error_msg("%s: Illegal ~user\n", inname);
+ error_msg("%s: Illegal ~user", inname);
return FALSE;
}
*p++ = '\0';
pw = getpwnam (buf + 1);
if (pw == NULL) {
- error_msg("%s: No user `%s'\n", inname, buf + 1);
+ error_msg("%s: No user `%s'", inname, buf + 1);
return FALSE;
}
- n = strlen (pw->pw_dir);
- n1 = strlen (p);
- outname = (char *) alloca ((size_t) (n + n1 + 2));
- memcpy (outname + n + 1, p, (size_t) (n1 + 1));
- memcpy (outname, pw->pw_dir, (size_t) n);
- outname[n] = '/';
+ outname = concat_path_file(pw->pw_dir, p);
+ dofre = TRUE;
}
}
|| chmod (outname, mode & (S_IRWXU | S_IRWXG | S_IRWXO))
)) {
perror_msg("%s", outname); /* */
+ if (dofre)
+ free(outname);
return FALSE;
}
/* 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,
break;
default:
- usage(uudecode_usage);
+ show_usage();
}
}