Ejemplo n.º 1
0
int
main(int argc, char *argv[])
{
	struct fdescr *dsc;
	Rune *delim;
	size_t i, len;
	int seq = 0, ret = 0;
	char *adelim = "\t";

	ARGBEGIN {
	case 's':
		seq = 1;
		break;
	case 'd':
		adelim = EARGF(usage());
		break;
	default:
		usage();
	} ARGEND;

	if (!argc)
		usage();

	/* populate delimiters */
	unescape(adelim);
	delim = ereallocarray(NULL, utflen(adelim) + 1, sizeof(*delim));
	len = utftorunestr(adelim, delim);
	if (!len)
		usage();

	/* populate file list */
	dsc = ereallocarray(NULL, argc, sizeof(*dsc));

	for (i = 0; i < argc; i++) {
		if (!strcmp(argv[i], "-")) {
			argv[i] = "<stdin>";
			dsc[i].fp = stdin;
		} else if (!(dsc[i].fp = fopen(argv[i], "r"))) {
			eprintf("fopen %s:", argv[i]);
		}
		dsc[i].name = argv[i];
	}

	if (seq) {
		sequential(dsc, argc, delim, len);
	} else {
		parallel(dsc, argc, delim, len);
	}

	for (i = 0; i < argc; i++)
		if (dsc[i].fp != stdin && fshut(dsc[i].fp, argv[i]))
			ret |= fshut(dsc[i].fp, argv[i]);

	ret |= fshut(stdin, "<stdin>") | fshut(stdout, "<stdout>");

	return ret;
}
Ejemplo n.º 2
0
int
main(int argc, char *argv[])
{
	FILE *fp;
	size_t len = 4;
	int ret = 0;
	char f;

	ARGBEGIN {
	case 'a':
		break;
	case 'n':
		len = estrtonum(EARGF(usage()), 1, LLONG_MAX);
		break;
	case 't':
		format = estrdup("%8l#: ");
		f = *EARGF(usage());
		if (f == 'd' || f == 'o' || f == 'x')
			format[3] = f;
		else
			usage();
		break;
	default:
		usage();
	} ARGEND;

	if (!argc) {
		strings(stdin, "<stdin>", len);
	} else {
		for (; *argv; argc--, argv++) {
			if (!strcmp(*argv, "-")) {
				*argv = "<stdin>";
				fp = stdin;
			} else if (!(fp = fopen(*argv, "r"))) {
				weprintf("fopen %s:", *argv);
				ret = 1;
				continue;
			}
			strings(fp, *argv, len);
			if (fp != stdin && fshut(fp, *argv))
				ret = 1;
		}
	}

	ret |= fshut(stdin, "<stdin>") | fshut(stdout, "<stdout>");

	return ret;
}
Ejemplo n.º 3
0
Archivo: wc.c Proyecto: maandree/sbase
int
main(int argc, char *argv[])
{
	FILE *fp;
	int many;
	int ret = 0;

	ARGBEGIN {
	case 'c':
		cmode = 'c';
		break;
	case 'm':
		cmode = 'm';
		break;
	case 'l':
		lflag = 1;
		break;
	case 'w':
		wflag = 1;
		break;
	default:
		usage();
	} ARGEND

	if (!argc) {
		wc(stdin, NULL);
	} else {
		for (many = (argc > 1); *argv; argc--, argv++) {
			if (!strcmp(*argv, "-")) {
				*argv = "<stdin>";
				fp = stdin;
			} else if (!(fp = fopen(*argv, "r"))) {
				weprintf("fopen %s:", *argv);
				ret = 1;
				continue;
			}
			wc(fp, *argv);
			if (fp != stdin && fshut(fp, *argv))
				ret = 1;
		}
		if (many)
			output("total", tc, tl, tw);
	}

	ret |= fshut(stdin, "<stdin>") | fshut(stdout, "<stdout>");

	return ret;
}
Ejemplo n.º 4
0
int
main(int argc, char *argv[])
{
	int savederrno;

	ARGBEGIN {
	case 'i':
		if (environ)
			*environ = NULL;
		break;
	case 'u':
		unsetenv(EARGF(usage()));
		break;
	default:
		usage();
	} ARGEND;

	for (; *argv && strchr(*argv, '='); argc--, argv++)
		putenv(*argv);

	if (*argv) {
		execvp(*argv, argv);
		savederrno = errno;
		weprintf("execvp %s:", *argv);
		_exit(126 + (savederrno == EEXIST));
	}

	for (; environ && *environ; environ++)
		puts(*environ);

	return fshut(stdout, "<stdout>");
}
Ejemplo n.º 5
0
Archivo: du.c Proyecto: Zeke-OS/zeke
int
main(int argc, char *argv[])
{
    struct recursor r = { .fn = du, .hist = NULL, .depth = 0, .maxdepth = 0,
                          .follow = 'P', .flags = 0 };
    off_t n = 0;
    int kflag = 0, dflag = 0;
    char *bsize;

    ARGBEGIN {
    case 'a':
        aflag = 1;
        break;
    case 'd':
        dflag = 1;
        maxdepth = estrtonum(EARGF(usage()), 0, MIN(LLONG_MAX, SIZE_MAX));
        break;
    case 'h':
        hflag = 1;
        break;
    case 'k':
        kflag = 1;
        break;
    case 's':
        sflag = 1;
        break;
    case 'x':
        r.flags |= SAMEDEV;
        break;
    case 'H':
    case 'L':
    case 'P':
        r.follow = ARGC();
        break;
    default:
        usage();
    } ARGEND;

    if ((aflag && sflag) || (dflag && sflag))
        usage();

    bsize = getenv("BLOCKSIZE");
    if (bsize)
        blksize = estrtonum(bsize, 1, MIN(LLONG_MAX, SIZE_MAX));
    if (kflag)
        blksize = 1024;

    if (!argc) {
        recurse(".", &n, &r);
        printpath(n, ".");
    } else {
        for (; *argv; argc--, argv++) {
            n = 0;
            recurse(*argv, &n, &r);
            printpath(n, *argv);
        }
    }

    return fshut(stdout, "<stdout>") || recurse_status;
}
Ejemplo n.º 6
0
int
main(int argc, char *argv[])
{
	FILE *fp[2] = { stdin, stdout };
	int ret = 0, i;
	char *fname[2] = { "<stdin>", "<stdout>" };

	ARGBEGIN {
	case 'c':
		countfmt = "%7ld ";
		break;
	case 'd':
		dflag = 1;
		break;
	case 'u':
		uflag = 1;
		break;
	case 'f':
		fskip = estrtonum(EARGF(usage()), 0, INT_MAX);
		break;
	case 's':
		sskip = estrtonum(EARGF(usage()), 0, INT_MAX);
		break;
	default:
		usage();
	} ARGEND;

	if (argc > 2)
		usage();

	for (i = 0; i < argc; i++) {
		if (strcmp(argv[i], "-")) {
			fname[i] = argv[i];
			if (!(fp[i] = fopen(argv[i], (i == 0) ? "r" : "w")))
				eprintf("fopen %s:", argv[i]);
		}
	}

	uniq(fp[0], fp[1]);
	uniqfinish(fp[1]);

	ret |= fshut(fp[0], fname[0]) | fshut(fp[1], fname[1]);

	return ret;
}
Ejemplo n.º 7
0
int
main(int argc, char *argv[])
{
	FILE *fp;
	int ret = 0;
	char *tl = "8";

	ARGBEGIN {
	case 't':
		tl = EARGF(usage());
		if (!*tl)
			eprintf("tablist cannot be empty\n");
		/* Fallthrough: -t implies -a */
	case 'a':
		aflag = 1;
		break;
	default:
		usage();
	} ARGEND

	tablistlen = parselist(tl);

	if (!argc) {
		unexpand("<stdin>", stdin);
	} else {
		for (; *argv; argc--, argv++) {
			if (!strcmp(*argv, "-")) {
				*argv = "<stdin>";
				fp = stdin;
			} else if (!(fp = fopen(*argv, "r"))) {
				weprintf("fopen %s:", *argv);
				ret = 1;
				continue;
			}
			unexpand(*argv, fp);
			if (fp != stdin && fshut(fp, *argv))
				ret = 1;
		}
	}

	ret |= fshut(stdin, "<stdin>") | fshut(stdout, "<stdout>");

	return ret;
}
Ejemplo n.º 8
0
int
main(int argc, char *argv[])
{
	int ret = 0, (*cryptfunc)(int, char **, struct crypt_ops *, uint8_t *, size_t) = cryptmain;
	uint8_t md[SHA256_DIGEST_LENGTH];

	ARGBEGIN {
	case 'c':
		cryptfunc = cryptcheck;
		break;
	default:
		usage();
	} ARGEND;

	ret |= cryptfunc(argc, argv, &sha256_ops, md, sizeof(md));
	ret |= fshut(stdin, "<stdin>") | fshut(stdout, "<stdout>");

	return ret;
}
Ejemplo n.º 9
0
int
main(int argc, char *argv[])
{
	FILE **fps = NULL;
	size_t i, n, nfps;
	int ret = 0, aflag = 0, iflag = 0;
	char buf[BUFSIZ];

	ARGBEGIN {
	case 'a':
		aflag = 1;
		break;
	case 'i':
		iflag = 1;
		break;
	default:
		usage();
	} ARGEND;

	if (iflag && signal(SIGINT, SIG_IGN) == SIG_ERR)
		eprintf("signal:");
	nfps = argc + 1;
	fps = ecalloc(nfps, sizeof(*fps));

	for (i = 0; i < argc; i++)
		if (!(fps[i] = fopen(argv[i], aflag ? "a" : "w")))
			eprintf("fopen %s:", argv[i]);
	fps[i] = stdout;

	while ((n = fread(buf, 1, sizeof(buf), stdin))) {
		for (i = 0; i < nfps; i++) {
			if (fwrite(buf, 1, n, fps[i]) == n)
				continue;
			eprintf("fwrite %s:", (i != argc) ? argv[i] : "<stdout>");
		}
	}

	ret |= fshut(stdin, "<stdin>") | fshut(stdout, "<stdout>");

	return ret;
}
Ejemplo n.º 10
0
int
main(int argc, char *argv[])
{
    FILE *fp, *tmpfp;
    int ret = 0;

    argv0 = argv[0], argc--, argv++;

    if (argc != 1)
        usage();

    if (!(tmpfp = tmpfile()))
        eprintf("tmpfile:");
    concat(stdin, "<stdin>", tmpfp, "<tmpfile>");
    rewind(tmpfp);

    if (!(fp = fopen(argv[0], "w")))
        eprintf("fopen %s:", argv[0]);
    concat(tmpfp, "<tmpfile>", fp, argv[0]);

    ret |= fshut(fp, argv[0]) | fshut(tmpfp, "<tmpfile>");

    return ret;
}
Ejemplo n.º 11
0
int
main(int argc, char *argv[])
{
	struct utsname u;
	int mflag = 0, nflag = 0, rflag = 0, sflag = 0, vflag = 0;

	ARGBEGIN {
	case 'a':
		mflag = nflag = rflag = sflag = vflag = 1;
		break;
	case 'm':
		mflag = 1;
		break;
	case 'n':
		nflag = 1;
		break;
	case 'r':
		rflag = 1;
		break;
	case 's':
		sflag = 1;
		break;
	case 'v':
		vflag = 1;
		break;
	default:
		usage();
	} ARGEND

	if (uname(&u) < 0)
		eprintf("uname:");

	if (sflag || !(nflag || rflag || vflag || mflag))
		putword(stdout, u.sysname);
	if (nflag)
		putword(stdout, u.nodename);
	if (rflag)
		putword(stdout, u.release);
	if (vflag)
		putword(stdout, u.version);
	if (mflag)
		putword(stdout, u.machine);
	putchar('\n');

	return fshut(stdout, "<stdout>");
}
Ejemplo n.º 12
0
int
main(int argc, char *argv[])
{
	int nflag = 0;

	argv0 = argv[0], argc--, argv++;

	if (*argv && !strcmp(*argv, "-n")) {
		nflag = 1;
		argc--, argv++;
	}

	for (; *argv; argc--, argv++)
		putword(stdout, *argv);
	if (!nflag)
		putchar('\n');

	return fshut(stdout, "<stdout>");
}
Ejemplo n.º 13
0
int
main(int argc, char *argv[])
{
	char host[HOST_NAME_MAX + 1];

	argv0 = argv[0], argc--, argv++;

	if (!argc) {
		if (gethostname(host, sizeof(host)) < 0)
			eprintf("gethostname:");
		puts(host);
	} else if (argc == 1) {
		if (sethostname(argv[0], strlen(argv[0])) < 0)
			eprintf("sethostname:");
	} else {
		usage();
	}

	return fshut(stdout, "<stdout>");
}
Ejemplo n.º 14
0
Archivo: pwd.c Proyecto: maandree/sbase
int
main(int argc, char *argv[])
{
	char cwd[PATH_MAX];
	char mode = 'L';

	ARGBEGIN {
	case 'L':
	case 'P':
		mode = ARGC();
		break;
	default:
		usage();
	} ARGEND

	if (!getcwd(cwd, sizeof(cwd)))
		eprintf("getcwd:");
	puts((mode == 'L') ? getpwd(cwd) : cwd);

	return fshut(stdout, "<stdout>");
}
Ejemplo n.º 15
0
int
main(int argc, char *argv[])
{
	uid_t uid;
	struct passwd *pw;

	argv0 = argv[0], argc--, argv++;

	if (argc)
		usage();

	uid = geteuid();
	errno = 0;
	if (!(pw = getpwuid(uid))) {
		if (errno)
			eprintf("getpwuid %d:", uid);
		else
			eprintf("getpwuid %d: no such user\n", uid);
	}
	puts(pw->pw_name);

	return fshut(stdout, "<stdout>");
}
Ejemplo n.º 16
0
Archivo: ls.c Proyecto: rovaughn/distro
int
main(int argc, char *argv[])
{
	struct entry *ents;
	size_t i;

	ARGBEGIN {
	case '1':
		/* ignore */
		break;
	case 'A':
		Aflag = 1;
		break;
	case 'a':
		aflag = 1;
		break;
	case 'c':
		cflag = 1;
		uflag = 0;
		break;
	case 'd':
		dflag = 1;
		break;
	case 'f':
		aflag = 1;
		fflag = 1;
		Uflag = 1;
		break;
	case 'F':
		Fflag = 1;
		break;
	case 'H':
		Hflag = 1;
		break;
	case 'h':
		hflag = 1;
		break;
	case 'i':
		iflag = 1;
		break;
	case 'L':
		Lflag = 1;
		break;
	case 'l':
		lflag = 1;
		break;
	case 'n':
		lflag = 1;
		nflag = 1;
		break;
	case 'p':
		pflag = 1;
		break;
	case 'q':
		qflag = 1;
		break;
	case 'R':
		Rflag = 1;
		break;
	case 'r':
		if (!fflag)
			rflag = 1;
		break;
	case 'S':
		Sflag = 1;
		tflag = 0;
		break;
	case 't':
		Sflag = 0;
		tflag = 1;
		break;
	case 'U':
		Uflag = 1;
		break;
	case 'u':
		uflag = 1;
		cflag = 0;
		break;
	default:
		usage();
	} ARGEND;

	many = (argc > 1);
	if (argc == 0)
		*--argv = ".", argc++;

	ents = ereallocarray(NULL, argc, sizeof(*ents));

	for (i = 0; i < argc; i++)
		mkent(&ents[i], argv[i], 1, Hflag || Lflag);
	qsort(ents, argc, sizeof(*ents), entcmp);
	for (i = 0; i < argc; i++)
		ls(&ents[rflag ? argc-i-1 : i], 1);

	return fshut(stdout, "<stdout>");
}
Ejemplo n.º 17
0
Archivo: cmp.c Proyecto: maandree/sbase
int
main(int argc, char *argv[])
{
	FILE *fp[2];
	size_t line = 1, n;
	int ret = 0, lflag = 0, sflag = 0, same = 1, b[2];

	ARGBEGIN {
	case 'l':
		lflag = 1;
		break;
	case 's':
		sflag = 1;
		break;
	default:
		usage();
	} ARGEND

	if (argc != 2 || (lflag && sflag))
		usage();

	for (n = 0; n < 2; n++) {
		if (!strcmp(argv[n], "-")) {
			argv[n] = "<stdin>";
			fp[n] = stdin;
		} else {
			if (!(fp[n] = fopen(argv[n], "r"))) {
				if (!sflag)
					weprintf("fopen %s:", argv[n]);
				return 2;
			}
		}
	}

	for (n = 1; ; n++) {
		b[0] = getc(fp[0]);
		b[1] = getc(fp[1]);

		if (b[0] == b[1]) {
			if (b[0] == EOF)
				break;
			else if (b[0] == '\n')
				line++;
			continue;
		} else if (b[0] == EOF || b[1] == EOF) {
			if (!sflag)
				weprintf("cmp: EOF on %s\n", argv[(b[0] != EOF)]);
			same = 0;
			break;
		} else if (!lflag) {
			if (!sflag)
				printf("%s %s differ: byte %zu, line %zu\n",
				       argv[0], argv[1], n, line);
			same = 0;
			break;
		} else {
			printf("%zu %o %o\n", n, b[0], b[1]);
			same = 0;
		}
	}

	if (!ret)
		ret = !same;
	if (fshut(fp[0], argv[0]) | (fp[0] != fp[1] && fshut(fp[1], argv[1])) |
	    fshut(stdout, "<stdout>"))
		ret = 2;

	return ret;
}
Ejemplo n.º 18
0
int
main(int argc, char *argv[])
{
	pid_t pid;
	size_t i;
	int ret = 0, sig = SIGTERM;

	argv0 = *argv, argv0 ? (argc--, argv++) : (void *)0;

	if (!argc)
		usage();

	if ((*argv)[0] == '-') {
		switch ((*argv)[1]) {
		case 'l':
			if ((*argv)[2])
				goto longopt;
			argc--, argv++;
			if (!argc) {
				for (i = 0; i < LEN(sigs); i++)
					puts(sigs[i].name);
			} else if (argc == 1) {
				sig = estrtonum(*argv, 0, INT_MAX);
				if (sig > 128)
					sig = WTERMSIG(sig);
				puts(sig2name(sig));
			} else {
				usage();
			}
			return fshut(stdout, "<stdout>");
		case 's':
			if ((*argv)[2])
				goto longopt;
			argc--, argv++;
			if (!argc)
				usage();
			sig = name2sig(*argv);
			argc--, argv++;
			break;
		case '-':
			if ((*argv)[2])
				goto longopt;
			argc--, argv++;
			break;
		default:
		longopt:
			/* XSI-extensions -argnum and -argname*/
			if (isdigit((*argv)[1])) {
				sig = estrtonum((*argv) + 1, 0, INT_MAX);
				sig2name(sig);
			} else {
				sig = name2sig((*argv) + 1);
			}
			argc--, argv++;
		}
	}

	if (argc && !strcmp(*argv, "--"))
		argc--, argv++;

	if (!argc)
		usage();

	for (; *argv; argc--, argv++) {
		pid = estrtonum(*argv, INT_MIN, INT_MAX);
		if (kill(pid, sig) < 0) {
			weprintf("kill %d:", pid);
			ret = 1;
		}
	}

	return ret;
}
Ejemplo n.º 19
0
int
main(int argc, char *argv[])
{
	Rune *rarg;
	size_t i, j, argi, lastargi, formatlen, blen;
	long long num;
	double dou;
	int cooldown = 0, width, precision, ret = 0;
	char *format, *tmp, *arg, *fmt, flag;

	argv0 = argv[0];
	if (argc < 2)
		usage();

	format = argv[1];
	if ((tmp = strstr(format, "\\c"))) {
		*tmp = 0;
		cooldown = 1;
	}
	formatlen = unescape(format);
	if (formatlen == 0)
		return 0;
	lastargi = 0;
	for (i = 0, argi = 2; !cooldown || i < formatlen; i++, i = cooldown ? i : (i % formatlen)) {
		if (i == 0) {
			if (lastargi == argi)
				break;
			lastargi = argi;
		}
		if (format[i] != '%') {
			putchar(format[i]);
			continue;
		}

		/* flag */
		for (flag = '\0', i++; strchr("#-+ 0", format[i]); i++) {
			flag = format[i];
		}

		/* field width */
		width = -1;
		if (format[i] == '*') {
			if (argi < argc)
				width = estrtonum(argv[argi++], 0, INT_MAX);
			else
				cooldown = 1;
			i++;
		} else {
			j = i;
			for (; strchr("+-0123456789", format[i]); i++);
			if (j != i) {
				tmp = estrndup(format + j, i - j);
				width = estrtonum(tmp, 0, INT_MAX);
				free(tmp);
			} else {
				width = 0;
			}
		}

		/* field precision */
		precision = -1;
		if (format[i] == '.') {
			if (format[++i] == '*') {
				if (argi < argc)
					precision = estrtonum(argv[argi++], 0, INT_MAX);
				else
					cooldown = 1;
				i++;
			} else {
				j = i;
				for (; strchr("+-0123456789", format[i]); i++);
				if (j != i) {
					tmp = estrndup(format + j, i - j);
					precision = estrtonum(tmp, 0, INT_MAX);
					free(tmp);
				} else {
					precision = 0;
				}
			}
		}

		if (format[i] != '%') {
			if (argi < argc)
				arg = argv[argi++];
			else {
				arg = "";
				cooldown = 1;
			}
		} else {
			putchar('%');
			continue;
		}

		switch (format[i]) {
		case 'b':
			if ((tmp = strstr(arg, "\\c"))) {
				*tmp = 0;
				blen = unescape(arg);
				fwrite(arg, sizeof(*arg), blen, stdout);
				return 0;
			}
			blen = unescape(arg);
			fwrite(arg, sizeof(*arg), blen, stdout);
			break;
		case 'c':
			unescape(arg);
			rarg = ereallocarray(NULL, utflen(arg) + 1, sizeof(*rarg));
			utftorunestr(arg, rarg);
			efputrune(rarg, stdout, "<stdout>");
			free(rarg);
			break;
		case 's':
			printf("%*.*s", width, precision, arg);
			break;
		case 'd': case 'i': case 'o': case 'u': case 'x': case 'X':
			for (j = 0; isspace(arg[j]); j++);
			if (arg[j] == '\'' || arg[j] == '\"') {
				arg += j + 1;
				unescape(arg);
				rarg = ereallocarray(NULL, utflen(arg) + 1, sizeof(*rarg));
				utftorunestr(arg, rarg);
				num = rarg[0];
			} else if (arg[0]) {
				errno = 0;
				if (format[i] == 'd' || format[i] == 'i')
					num = strtol(arg, &tmp, 0);
				else
					num = strtoul(arg, &tmp, 0);

				if (tmp == arg || *tmp != '\0') {
					ret = 1;
					weprintf("%%%c %s: conversion error\n",
					    format[i], arg);
				}
				if (errno == ERANGE) {
					ret = 1;
					weprintf("%%%c %s: out of range\n",
					    format[i], arg);
				}
			} else {
					num = 0;
			}
			fmt = estrdup(flag ? "%#*.*ll#" : "%*.*ll#");
			if (flag)
				fmt[1] = flag;
			fmt[flag ? 7 : 6] = format[i];
			printf(fmt, width, precision, num);
			free(fmt);
			break;
		case 'a': case 'A': case 'e': case 'E': case 'f': case 'F': case 'g': case 'G':
			fmt = estrdup(flag ? "%#*.*#" : "%*.*#");
			if (flag)
				fmt[1] = flag;
			fmt[flag ? 5 : 4] = format[i];
			dou = (strlen(arg) > 0) ? estrtod(arg) : 0;
			printf(fmt, width, precision, dou);
			free(fmt);
			break;
		default:
			eprintf("Invalid format specifier '%c'.\n", format[i]);
		}
		if (argi >= argc)
			cooldown = 1;
	}

	return fshut(stdout, "<stdout>") | ret;
}
Ejemplo n.º 20
0
int
main(int argc, char *argv[])
{
	size_t jf[2] = { jfield, jfield, };
	FILE *fp[2];
	int ret = 0, n;
	char *fno;

	ARGBEGIN {
	case '1':
		jf[0] = estrtonum(EARGF(usage()), 1, MIN(LLONG_MAX, SIZE_MAX));
		break;
	case '2':
		jf[1] = estrtonum(EARGF(usage()), 1, MIN(LLONG_MAX, SIZE_MAX));
		break;
	case 'a':
		fno = EARGF(usage());
		if (strcmp(fno, "1") == 0)
			unpairsa = 1;
		else if (strcmp(fno, "2") == 0)
			unpairsb = 1;
		else
			usage();
		break;
	case 'e':
		replace = EARGF(usage());
		break;
	case 'o':
		oflag = 1;
		initolist(&output);
		makeolist(&output, EARGF(usage()));
		break;
	case 't':
		sep = EARGF(usage());
		break;
	case 'v':
		pairs = 0;
		fno = EARGF(usage());
		if (strcmp(fno, "1") == 0)
			unpairsa = 1;
		else if (strcmp(fno, "2") == 0)
			unpairsb = 1;
		else
			usage();
		break;
	default:
		usage();
	} ARGEND;

	if (sep)
		seplen = unescape(sep);

	if (argc != 2)
		usage();

	for (n = 0; n < 2; n++) {
		if (!strcmp(argv[n], "-")) {
			argv[n] = "<stdin>";
			fp[n] = stdin;
		} else if (!(fp[n] = fopen(argv[n], "r"))) {
			eprintf("fopen %s:", argv[n]);
		}
	}

	jf[0]--;
	jf[1]--;

	join(fp[0], fp[1], jf[0], jf[1]);

	if (oflag)
		freespecs(&output);

	if (fshut(fp[0], argv[0]) | (fp[0] != fp[1] && fshut(fp[1], argv[1])) |
	    fshut(stdout, "<stdout>"))
		ret = 2;

	return ret;
}
Ejemplo n.º 21
0
Archivo: nl.c Proyecto: rovaughn/distro
int
main(int argc, char *argv[])
{
	FILE *fp = NULL;
	size_t l, s;
	int ret = 0;
	char *d, *formattype, *formatblit;

	ARGBEGIN {
	case 'd':
		d = EARGF(usage());
		l = utflen(d);

		switch (l) {
		case 0:
			break;
		case 1:
			s = strlen(d);
			delim = emalloc(s + 1 + 1);
			estrlcpy(delim, d, s + 1 + 1);
			estrlcat(delim, ":", s + 1 + 1);
			delimlen = s + 1;
			break;
		default:
			delim = d;
			delimlen = strlen(delim);
			break;
		}
		break;
	case 'f':
		type[0] = getlinetype(EARGF(usage()), preg);
		break;
	case 'b':
		type[1] = getlinetype(EARGF(usage()), preg + 1);
		break;
	case 'h':
		type[2] = getlinetype(EARGF(usage()), preg + 2);
		break;
	case 'i':
		incr = estrtonum(EARGF(usage()), 0, MIN(LLONG_MAX, SIZE_MAX));
		break;
	case 'l':
		blines = estrtonum(EARGF(usage()), 0, MIN(LLONG_MAX, SIZE_MAX));
		break;
	case 'n':
		formattype = EARGF(usage());
		estrlcpy(format, "%", sizeof(format));

		if (!strcmp(formattype, "ln")) {
			formatblit = "-";
		} else if (!strcmp(formattype, "rn")) {
			formatblit = "";
		} else if (!strcmp(formattype, "rz")) {
			formatblit = "0";
		} else {
			eprintf("%s: bad format\n", formattype);
		}

		estrlcat(format, formatblit, sizeof(format));
		estrlcat(format, "*ld%s", sizeof(format));
		break;
	case 'p':
		pflag = 1;
		break;
	case 's':
		sep = EARGF(usage());
		break;
	case 'v':
		startnum = estrtonum(EARGF(usage()), 0, MIN(LLONG_MAX, SIZE_MAX));
		break;
	case 'w':
		width = estrtonum(EARGF(usage()), 1, INT_MAX);
		break;
	default:
		usage();
	} ARGEND;

	if (argc > 1)
		usage();

	if (!argc) {
		nl("<stdin>", stdin);
	} else {
		if (!strcmp(argv[0], "-")) {
			argv[0] = "<stdin>";
			fp = stdin;
		} else if (!(fp = fopen(argv[0], "r"))) {
			eprintf("fopen %s:", argv[0]);
		}
		nl(argv[0], fp);
	}

	ret |= fp && fp != stdin && fshut(fp, argv[0]);
	ret |= fshut(stdin, "<stdin>") | fshut(stdout, "<stdout>");

	return ret;
}
Ejemplo n.º 22
0
void
enfshut(int status, FILE *fp, const char *fname)
{
	if (fshut(fp, fname))
		exit(status);
}