#include <dirent.h>
#include <errno.h>
+/* Assumed length of a line in /etc/mtab */
+#define MTAB_LINE 160
+
const char *devname(dev_t);
const char *mntpoint(const char *);
void df_path(const char *path);
void df_all(void)
{
FILE *f;
- static char tmp[256];
- static char dev[20], mntpt[20], fstype[20], rwflag[20];
+ char tmp[MTAB_LINE];
+ char* dev;
+ char* mntpt;
f = fopen("/etc/mtab", "r");
if (f) {
- while (fgets(tmp, 256, f)) {
- sscanf(tmp, "%s %s %s %s\n", dev, mntpt, fstype, rwflag);
+ while (fgets(tmp, sizeof(MTAB_LINE), f)) {
+ dev = strtok(tmp, " ");
+ mntpt = strtok(NULL, " ");
df_path(mntpt);
}
fclose(f);
const char *mntpoint(const char *devname)
{
FILE *f;
- static char tmp[256];
- static char dev[20], mntpt[20], fstype[20], rwflag[20];
+ char tmp[MTAB_LINE];
+ char* dev;
+ char* mntpt;
f = fopen("/etc/mtab", "r");
if (f) {
- while (fgets(tmp, 256, f)) {
- sscanf(tmp, "%s %s %s %s\n", dev, mntpt, fstype, rwflag);
+ while (fgets(tmp, sizeof(tmp), f)) {
+ dev = strtok(tmp, " ");
+ mntpt = strtok(NULL, " ");
if (strcmp(dev, devname) == 0) {
fclose(f);
- return mntpt;
+ return strdup(mntpt);
}
}
fclose(f);
#include <stdlib.h>
#include <sys/stat.h>
+static long parse_number(const char* p, int base)
+{
+ char* end;
+ unsigned long result;
+
+ errno = 0;
+ result = strtoul(p, &end, base);
+ if (errno || *end)
+ return -1;
+ return result;
+}
int do_mknod(char *path, char *modes, char *devs)
{
int mode;
int dev;
- mode = -1;
- sscanf(modes, "%o", &mode);
- if (mode == -1) {
+ mode = parse_number(modes, 8);
+ if (mode < 0) {
printf("mknod: bad mode\n");
return (-1);
}
return (-1);
}
- if (sscanf(devs, "%d", &dev) != 1) {
+ dev = parse_number(devs, 10);
+ if (dev < 0) {
printf("mknod: bad device\n");
return (-1);
}
#include <string.h>
#include <stdlib.h>
-
-char tmp[256];
+/* Assumed length of a line in /etc/mtab */
+#define MTAB_LINE 160
int lsmtab(void)
{
FILE *f;
- static char dev[20], mntpt[20], fstype[20], rwflag[20];
+ char tmp[MTAB_LINE];
+ char* dev;
+ char* mntpt;
+ char* fstype;
+ char* rwflag;
f = fopen("/etc/mtab", "r");
if (f) {
- while (fgets(tmp, 256, f)) {
- sscanf(tmp, "%s %s %s %s\n", dev, mntpt, fstype, rwflag);
+ while (fgets(tmp, sizeof(tmp), f)) {
+ dev = strtok(tmp, " ");
+ mntpt = strtok(NULL, " ");
+ fstype = strtok(NULL, " ");
+ rwflag = strtok(NULL, "\n");
if (strcmp(fstype, "swap") == 0)
printf("%s is swapspace\n", dev);
else
{
FILE *inpf, *outf;
char *tmp_fname;
+ int c;
if ((tmp_fname = tmpnam(NULL)) == NULL) {
perror("Error getting temporary file name");
exit(1);
}
if (inpf) {
- while (fgets(tmp, 255, inpf)) {
- fprintf(outf, "%s", tmp);
+ for (;;) {
+ c = fgetc(inpf);
+ if (c == EOF)
+ break;
+ fputc(c, outf);
}
fclose(inpf);
}
return 0;
}
-main(int argc, char *argv[])
+int main(int argc, char *argv[])
{
if (argc == 1) {
lsmtab();
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
+#include <signal.h>
#include <unistd.h>
extern char **environ; /* Location of Envp from executable Header */
char buf[128];
char eline[45]; /* Line for Search command */
-char cmd[50], arg[MAX_ARGS][50];
-
+char* cmd;
+char* arg[MAX_ARGS];
int main(int argc, char *argval[])
{
char *path, *tp, *sp; /* Pointers for Path Searching */
- int login_sh, pid, sig, stat, count, asis, i;
+ int login_sh, pid, sig, stat, asis, i;
char cprompt;
char *home;
- char *argv[MAX_ARGS+1];
+ const char *argv[MAX_ARGS+1];
login_sh = 0;
if (argval[0][0] == '-') login_sh = 1;
cprompt = (getuid() == 0) ? '#' : '$';
for (;;) {
- cmd[0] = (char) 0;
- for (i = 0; i < MAX_ARGS; i++) arg[i][0] = (char) 0;
+ for (i = 0; i < MAX_ARGS; i++) arg[i] = NULL;
do {
printf("ssh%c ", cprompt);
fflush(stdout);
buf[strlen(buf) - 1] = '\0'; /* Strip newline from fgets */
}
while (buf[0] == (char) 0);
- count = sscanf(buf, "%s %s %s %s %s %s %s %s %s %s %s",
- cmd,
- arg[0], arg[1], arg[2], arg[3], arg[4],
- arg[5], arg[6], arg[7], arg[8], arg[9]);
+ cmd = strtok(buf, " \t");
+ for (i = 0; i < MAX_ARGS; i++)
+ arg[i] = strtok(NULL, " \t");
/* Check for User-Requested Exit back to Login Prompt */
if (strcmp(cmd, "exit") == 0)
else {
argv[0] = cmd; /* Build Argv Pointer Array */
for (i = 0; i < MAX_ARGS; ++i)
- argv[i+1] = *arg[i] ? arg[i] : (char *) NULL;
+ argv[i+1] = arg[i];
if ((pid = fork()) == -1) { /* Try to spawn new Process */
printf("ssh: can't fork\n");
*tp++ = '/';
for (i = 0; (*tp++ = cmd[i++]) != '\0'; )
;
- execve(eline, (const char **)argv, (const char **)environ);
+ execve(eline, argv, (const char**) environ);
}
- printf("ssh: %s?\n", buf); /* Say we can't exec */
+ printf("ssh: %s?\n", cmd); /* Say we can't exec */
exit(1);
} /* Parent is in context */
wait(0); /* Parent waits for completion */
#include <string.h>
#include <stdlib.h>
-
-char tmp[256];
+/* Assumed length of a line in /etc/mtab */
+#define MTAB_LINE 160
char *getdev(char *arg)
{
FILE *f;
- static char dev[20], mntpt[20], fstype[20], rwflag[20];
+ char tmp[MTAB_LINE];
+ char* dev;
+ char* mntpt;
f = fopen("/etc/mtab", "r");
if (f) {
- while (fgets(tmp, 256, f)) {
- sscanf(tmp, "%s %s %s %s\n", dev, mntpt, fstype, rwflag);
+ while (fgets(tmp, sizeof(tmp), f)) {
+ dev = strtok(tmp, " ");
+ mntpt = strtok(NULL, " ");
if ((strcmp(dev, arg) == 0) || (strcmp(mntpt, arg) == 0)) {
fclose(f);
- return dev;
+ return strdup(dev);
}
}
fclose(f);
{
FILE *inpf, *outf;
char *tmp_fname;
- static char dev[20], mntpt[20], fstype[20], rwflag[20];
+ char tmp[MTAB_LINE];
+ char* dev;
+ char* mntpt;
if ((tmp_fname = tmpnam(NULL)) == NULL) {
perror("Error getting temporary file name");
perror("Can't create temporary file");
exit(1);
}
- while (fgets(tmp, 255, inpf)) {
- sscanf(tmp, "%s %s %s %s\n", dev, mntpt, fstype, rwflag);
+ while (fgets(tmp, sizeof(tmp), inpf)) {
+ dev = strtok(tmp, " ");
+ mntpt = strtok(NULL, " ");
if (strcmp(dev, devname) == 0) {
continue;
} else {
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
+#include <errno.h>
#define loop for(;;)
int partn, lens;
int debug = 0, nochk = 0, onedone = 0;
int chtbl[NCHARS], cdlen[NORMLEN + 3];
+char buf[LINELEN];
-int main(int argc, char **argv);
char *getnword(char *str, int n);
void gettable(void);
void decode(void);
void getfile(char *buf);
+static void malformed_begin(void)
+{
+ printf("uud: malformed begin line\n");
+ exit(10);
+}
+
+static long parse_number(const char* p, int base)
+{
+ char* end;
+ unsigned long result;
+
+ errno = 0;
+ result = strtoul(p, &end, base);
+ if (errno || *end)
+ return -1;
+ return result;
+}
+
int main(int argc, char *argv[])
{
int mode;
register int i, j;
char *curarg;
- char dest[FILELEN], buf[LINELEN];
+ char *begin;
+ char *dest;
+ static char buf[LINELEN];
while ((curarg = argv[1]) != NULL && curarg[0] == '-') {
if (((curarg[1] == 'd') || (curarg[1] == 'D')) &&
lens = strlen(buf);
if (lens) buf[--lens] = '\0';
- if (sscanf(buf, "begin%o%s", &mode, dest) != 2) {
- printf("uud: Missing filename in begin line.\n");
- exit(10);
- }
+ /* Parse the begin line without using sscanf (because it's huge). */
+ begin = strtok(buf, " \t");
+ if (!begin || (strcmp(begin, "begin") != 0))
+ malformed_begin();
+ dest = strtok(NULL, " \t");
+ if (!dest)
+ malformed_begin();
+ mode = parse_number(dest, 8);
+ if (mode < 0)
+ malformed_begin();
+ dest = strtok(NULL, " \t");
+ if (!dest)
+ malformed_begin();
if (target != NULL) {
strcpy(ofname, target);
{
register int c, n = 0;
register char *cpt;
- char buf[LINELEN];
for (c = 0; c < NCHARS; c++) chtbl[c] = -1;
register int *trtbl = chtbl;
register int n, c, rlen;
register unsigned int len;
- char buf[LINELEN], outl[LINELEN];
+ static char outl[LINELEN];
loop {
if (fgets(buf, sizeof buf, inpf) == NULL) {