grep, kill, renice, sort: style: put main at bottom
This commit is contained in:
parent
b2e73936bf
commit
ad6776e9a1
220
grep.c
220
grep.c
|
@ -36,116 +36,6 @@ struct pattern {
|
|||
|
||||
static SLIST_HEAD(phead, pattern) phead;
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
enprintf(Error, "usage: %s [-EFHchilnqsvwx] [-e pattern] [-f file] [pattern] [file ...]\n", argv0);
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
struct pattern *pnode;
|
||||
int i, m, flags = REG_NOSUB, match = NoMatch;
|
||||
FILE *fp;
|
||||
char *arg;
|
||||
|
||||
SLIST_INIT(&phead);
|
||||
|
||||
ARGBEGIN {
|
||||
case 'E':
|
||||
Eflag = 1;
|
||||
flags |= REG_EXTENDED;
|
||||
break;
|
||||
case 'F':
|
||||
Fflag = 1;
|
||||
break;
|
||||
case 'H':
|
||||
Hflag = 1;
|
||||
hflag = 0;
|
||||
break;
|
||||
case 'e':
|
||||
arg = EARGF(usage());
|
||||
fp = fmemopen(arg, strlen(arg) + 1, "r");
|
||||
addpatternfile(fp);
|
||||
fclose(fp);
|
||||
eflag = 1;
|
||||
break;
|
||||
case 'f':
|
||||
arg = EARGF(usage());
|
||||
fp = fopen(arg, "r");
|
||||
if (!fp)
|
||||
enprintf(Error, "fopen %s:", arg);
|
||||
addpatternfile(fp);
|
||||
fclose(fp);
|
||||
fflag = 1;
|
||||
break;
|
||||
case 'h':
|
||||
hflag = 1;
|
||||
Hflag = 0;
|
||||
break;
|
||||
case 'c':
|
||||
case 'l':
|
||||
case 'n':
|
||||
case 'q':
|
||||
mode = ARGC();
|
||||
break;
|
||||
case 'i':
|
||||
flags |= REG_ICASE;
|
||||
iflag = 1;
|
||||
break;
|
||||
case 's':
|
||||
sflag = 1;
|
||||
break;
|
||||
case 'v':
|
||||
vflag = 1;
|
||||
break;
|
||||
case 'w':
|
||||
wflag = 1;
|
||||
break;
|
||||
case 'x':
|
||||
xflag = 1;
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
} ARGEND;
|
||||
|
||||
if (argc == 0 && !eflag && !fflag)
|
||||
usage(); /* no pattern */
|
||||
|
||||
/* just add literal pattern to list */
|
||||
if (!eflag && !fflag) {
|
||||
fp = fmemopen(argv[0], strlen(argv[0]) + 1, "r");
|
||||
addpatternfile(fp);
|
||||
fclose(fp);
|
||||
argc--;
|
||||
argv++;
|
||||
}
|
||||
|
||||
if (!Fflag)
|
||||
/* Compile regex for all search patterns */
|
||||
SLIST_FOREACH(pnode, &phead, entry)
|
||||
enregcomp(Error, &pnode->preg, pnode->pattern, flags);
|
||||
many = (argc > 1);
|
||||
if (argc == 0) {
|
||||
match = grep(stdin, "<stdin>");
|
||||
} else {
|
||||
for (i = 0; i < argc; i++) {
|
||||
if (!(fp = fopen(argv[i], "r"))) {
|
||||
if (!sflag)
|
||||
weprintf("fopen %s:", argv[i]);
|
||||
match = Error;
|
||||
continue;
|
||||
}
|
||||
m = grep(fp, argv[i]);
|
||||
if (m == Error || (match != Error && m == Match))
|
||||
match = m;
|
||||
fclose(fp);
|
||||
}
|
||||
}
|
||||
return match;
|
||||
}
|
||||
|
||||
static void
|
||||
addpattern(const char *pattern)
|
||||
{
|
||||
|
@ -269,3 +159,113 @@ end:
|
|||
}
|
||||
return match;
|
||||
}
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
enprintf(Error, "usage: %s [-EFHchilnqsvwx] [-e pattern] [-f file] [pattern] [file ...]\n", argv0);
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
struct pattern *pnode;
|
||||
int i, m, flags = REG_NOSUB, match = NoMatch;
|
||||
FILE *fp;
|
||||
char *arg;
|
||||
|
||||
SLIST_INIT(&phead);
|
||||
|
||||
ARGBEGIN {
|
||||
case 'E':
|
||||
Eflag = 1;
|
||||
flags |= REG_EXTENDED;
|
||||
break;
|
||||
case 'F':
|
||||
Fflag = 1;
|
||||
break;
|
||||
case 'H':
|
||||
Hflag = 1;
|
||||
hflag = 0;
|
||||
break;
|
||||
case 'e':
|
||||
arg = EARGF(usage());
|
||||
fp = fmemopen(arg, strlen(arg) + 1, "r");
|
||||
addpatternfile(fp);
|
||||
fclose(fp);
|
||||
eflag = 1;
|
||||
break;
|
||||
case 'f':
|
||||
arg = EARGF(usage());
|
||||
fp = fopen(arg, "r");
|
||||
if (!fp)
|
||||
enprintf(Error, "fopen %s:", arg);
|
||||
addpatternfile(fp);
|
||||
fclose(fp);
|
||||
fflag = 1;
|
||||
break;
|
||||
case 'h':
|
||||
hflag = 1;
|
||||
Hflag = 0;
|
||||
break;
|
||||
case 'c':
|
||||
case 'l':
|
||||
case 'n':
|
||||
case 'q':
|
||||
mode = ARGC();
|
||||
break;
|
||||
case 'i':
|
||||
flags |= REG_ICASE;
|
||||
iflag = 1;
|
||||
break;
|
||||
case 's':
|
||||
sflag = 1;
|
||||
break;
|
||||
case 'v':
|
||||
vflag = 1;
|
||||
break;
|
||||
case 'w':
|
||||
wflag = 1;
|
||||
break;
|
||||
case 'x':
|
||||
xflag = 1;
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
} ARGEND;
|
||||
|
||||
if (argc == 0 && !eflag && !fflag)
|
||||
usage(); /* no pattern */
|
||||
|
||||
/* just add literal pattern to list */
|
||||
if (!eflag && !fflag) {
|
||||
fp = fmemopen(argv[0], strlen(argv[0]) + 1, "r");
|
||||
addpatternfile(fp);
|
||||
fclose(fp);
|
||||
argc--;
|
||||
argv++;
|
||||
}
|
||||
|
||||
if (!Fflag)
|
||||
/* Compile regex for all search patterns */
|
||||
SLIST_FOREACH(pnode, &phead, entry)
|
||||
enregcomp(Error, &pnode->preg, pnode->pattern, flags);
|
||||
many = (argc > 1);
|
||||
if (argc == 0) {
|
||||
match = grep(stdin, "<stdin>");
|
||||
} else {
|
||||
for (i = 0; i < argc; i++) {
|
||||
if (!(fp = fopen(argv[i], "r"))) {
|
||||
if (!sflag)
|
||||
weprintf("fopen %s:", argv[i]);
|
||||
match = Error;
|
||||
continue;
|
||||
}
|
||||
m = grep(fp, argv[i]);
|
||||
if (m == Error || (match != Error && m == Match))
|
||||
match = m;
|
||||
fclose(fp);
|
||||
}
|
||||
}
|
||||
return match;
|
||||
}
|
||||
|
|
52
kill.c
52
kill.c
|
@ -26,6 +26,32 @@ struct {
|
|||
const char *sig2name(int);
|
||||
int name2sig(const char *);
|
||||
|
||||
const char *
|
||||
sig2name(int sig)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < LEN(sigs); i++)
|
||||
if (sigs[i].sig == sig)
|
||||
return sigs[i].name;
|
||||
eprintf("%d: bad signal number\n", sig);
|
||||
/* unreachable */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int
|
||||
name2sig(const char *name)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < LEN(sigs); i++)
|
||||
if (strcasecmp(sigs[i].name, name) == 0)
|
||||
return sigs[i].sig;
|
||||
eprintf("%s: bad signal name\n", name);
|
||||
/* unreachable */
|
||||
return -1;
|
||||
}
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
|
@ -110,29 +136,3 @@ main(int argc, char *argv[])
|
|||
|
||||
exit(ret);
|
||||
}
|
||||
|
||||
const char *
|
||||
sig2name(int sig)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < LEN(sigs); i++)
|
||||
if (sigs[i].sig == sig)
|
||||
return sigs[i].name;
|
||||
eprintf("%d: bad signal number\n", sig);
|
||||
/* unreachable */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int
|
||||
name2sig(const char *name)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < LEN(sigs); i++)
|
||||
if (strcasecmp(sigs[i].name, name) == 0)
|
||||
return sigs[i].sig;
|
||||
eprintf("%s: bad signal name\n", name);
|
||||
/* unreachable */
|
||||
return -1;
|
||||
}
|
||||
|
|
78
renice.c
78
renice.c
|
@ -10,6 +10,45 @@
|
|||
static int strtop(const char *);
|
||||
static int renice(int, int, long);
|
||||
|
||||
static int
|
||||
strtop(const char *s)
|
||||
{
|
||||
char *end;
|
||||
long n;
|
||||
|
||||
errno = 0;
|
||||
n = strtol(s, &end, 10);
|
||||
if (*end != '\0') {
|
||||
weprintf("%s: not an integer\n", s);
|
||||
return -1;
|
||||
}
|
||||
if (errno != 0 || n <= 0 || n > INT_MAX) {
|
||||
weprintf("%s: invalid value\n", s);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return (int)n;
|
||||
}
|
||||
|
||||
static int
|
||||
renice(int which, int who, long adj)
|
||||
{
|
||||
errno = 0;
|
||||
adj += getpriority(which, who);
|
||||
if (errno != 0) {
|
||||
weprintf("getpriority %d:", who);
|
||||
return 0;
|
||||
}
|
||||
|
||||
adj = MAX(PRIO_MIN, MIN(adj, PRIO_MAX));
|
||||
if (setpriority(which, who, (int)adj) < 0) {
|
||||
weprintf("setpriority %d:", who);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
|
@ -71,42 +110,3 @@ main(int argc, char *argv[])
|
|||
|
||||
return status;
|
||||
}
|
||||
|
||||
static int
|
||||
strtop(const char *s)
|
||||
{
|
||||
char *end;
|
||||
long n;
|
||||
|
||||
errno = 0;
|
||||
n = strtol(s, &end, 10);
|
||||
if (*end != '\0') {
|
||||
weprintf("%s: not an integer\n", s);
|
||||
return -1;
|
||||
}
|
||||
if (errno != 0 || n <= 0 || n > INT_MAX) {
|
||||
weprintf("%s: invalid value\n", s);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return (int)n;
|
||||
}
|
||||
|
||||
static int
|
||||
renice(int which, int who, long adj)
|
||||
{
|
||||
errno = 0;
|
||||
adj += getpriority(which, who);
|
||||
if (errno != 0) {
|
||||
weprintf("getpriority %d:", who);
|
||||
return 0;
|
||||
}
|
||||
|
||||
adj = MAX(PRIO_MIN, MIN(adj, PRIO_MAX));
|
||||
if (setpriority(which, who, (int)adj) < 0) {
|
||||
weprintf("setpriority %d:", who);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
|
166
sort.c
166
sort.c
|
@ -42,89 +42,6 @@ static char *columns(char *, const struct keydef *);
|
|||
static int Cflag = 0, cflag = 0, uflag = 0;
|
||||
static char *fieldsep = NULL;
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
enprintf(2, "usage: %s [-Cbcnru] [-t delim] [-k def]... [file...]\n", argv0);
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
size_t i;
|
||||
FILE *fp;
|
||||
struct linebuf linebuf = EMPTY_LINEBUF;
|
||||
int global_flags = 0;
|
||||
|
||||
ARGBEGIN {
|
||||
case 'C':
|
||||
Cflag = 1;
|
||||
break;
|
||||
case 'b':
|
||||
global_flags |= MOD_STARTB | MOD_ENDB;
|
||||
break;
|
||||
case 'c':
|
||||
cflag = 1;
|
||||
break;
|
||||
case 'k':
|
||||
addkeydef(EARGF(usage()), global_flags);
|
||||
break;
|
||||
case 'n':
|
||||
global_flags |= MOD_N;
|
||||
break;
|
||||
case 'r':
|
||||
global_flags |= MOD_R;
|
||||
break;
|
||||
case 't':
|
||||
fieldsep = EARGF(usage());
|
||||
if (strlen(fieldsep) != 1)
|
||||
usage();
|
||||
break;
|
||||
case 'u':
|
||||
uflag = 1;
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
} ARGEND;
|
||||
|
||||
if (!head && global_flags)
|
||||
addkeydef("1", global_flags);
|
||||
addkeydef("1", global_flags & MOD_R);
|
||||
|
||||
if (argc == 0) {
|
||||
if (Cflag || cflag) {
|
||||
check(stdin);
|
||||
} else {
|
||||
getlines(stdin, &linebuf);
|
||||
}
|
||||
} else for (; argc > 0; argc--, argv++) {
|
||||
if (!(fp = fopen(argv[0], "r"))) {
|
||||
enprintf(2, "fopen %s:", argv[0]);
|
||||
continue;
|
||||
}
|
||||
if (Cflag || cflag) {
|
||||
check(fp);
|
||||
} else {
|
||||
getlines(fp, &linebuf);
|
||||
}
|
||||
fclose(fp);
|
||||
}
|
||||
|
||||
if (!Cflag && !cflag) {
|
||||
qsort(linebuf.lines, linebuf.nlines, sizeof *linebuf.lines,
|
||||
(int (*)(const void *, const void *))linecmp);
|
||||
|
||||
for (i = 0; i < linebuf.nlines; i++) {
|
||||
if (!uflag || i == 0 || linecmp((const char **)&linebuf.lines[i],
|
||||
(const char **)&linebuf.lines[i-1])) {
|
||||
fputs(linebuf.lines[i], stdout);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
addkeydef(char *def, int flags)
|
||||
{
|
||||
|
@ -303,3 +220,86 @@ columns(char *line, const struct keydef *kd)
|
|||
|
||||
return enstrndup(2, start, end - start);
|
||||
}
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
enprintf(2, "usage: %s [-Cbcnru] [-t delim] [-k def]... [file...]\n", argv0);
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
size_t i;
|
||||
FILE *fp;
|
||||
struct linebuf linebuf = EMPTY_LINEBUF;
|
||||
int global_flags = 0;
|
||||
|
||||
ARGBEGIN {
|
||||
case 'C':
|
||||
Cflag = 1;
|
||||
break;
|
||||
case 'b':
|
||||
global_flags |= MOD_STARTB | MOD_ENDB;
|
||||
break;
|
||||
case 'c':
|
||||
cflag = 1;
|
||||
break;
|
||||
case 'k':
|
||||
addkeydef(EARGF(usage()), global_flags);
|
||||
break;
|
||||
case 'n':
|
||||
global_flags |= MOD_N;
|
||||
break;
|
||||
case 'r':
|
||||
global_flags |= MOD_R;
|
||||
break;
|
||||
case 't':
|
||||
fieldsep = EARGF(usage());
|
||||
if (strlen(fieldsep) != 1)
|
||||
usage();
|
||||
break;
|
||||
case 'u':
|
||||
uflag = 1;
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
} ARGEND;
|
||||
|
||||
if (!head && global_flags)
|
||||
addkeydef("1", global_flags);
|
||||
addkeydef("1", global_flags & MOD_R);
|
||||
|
||||
if (argc == 0) {
|
||||
if (Cflag || cflag) {
|
||||
check(stdin);
|
||||
} else {
|
||||
getlines(stdin, &linebuf);
|
||||
}
|
||||
} else for (; argc > 0; argc--, argv++) {
|
||||
if (!(fp = fopen(argv[0], "r"))) {
|
||||
enprintf(2, "fopen %s:", argv[0]);
|
||||
continue;
|
||||
}
|
||||
if (Cflag || cflag) {
|
||||
check(fp);
|
||||
} else {
|
||||
getlines(fp, &linebuf);
|
||||
}
|
||||
fclose(fp);
|
||||
}
|
||||
|
||||
if (!Cflag && !cflag) {
|
||||
qsort(linebuf.lines, linebuf.nlines, sizeof *linebuf.lines,
|
||||
(int (*)(const void *, const void *))linecmp);
|
||||
|
||||
for (i = 0; i < linebuf.nlines; i++) {
|
||||
if (!uflag || i == 0 || linecmp((const char **)&linebuf.lines[i],
|
||||
(const char **)&linebuf.lines[i-1])) {
|
||||
fputs(linebuf.lines[i], stdout);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user