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; }
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; }
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; }
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>"); }
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; }
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; }
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; }
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; }
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; }
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; }
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>"); }
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>"); }
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>"); }
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>"); }
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>"); }
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>"); }
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; }
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; }
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; }
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; }
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; }
void enfshut(int status, FILE *fp, const char *fname) { if (fshut(fp, fname)) exit(status); }