From ba2871aa3477af24b422547154a5d4daa8c6408f Mon Sep 17 00:00:00 2001 From: Serge Date: Sun, 10 Jul 2022 22:14:32 -0700 Subject: [PATCH] Update commands bc, egrep, expr, iostat, mail, ps, su, vmstat, wall, write. --- include/unistd.h | 1 + src/cmd/bc.y | 111 +++++++++------ src/cmd/egrep.y | 136 ++++++++++++------ src/cmd/expr.y | 353 ++++++++++++++++++++++++----------------------- src/cmd/iostat.c | 143 ++++++++++--------- src/cmd/mail.c | 281 +++++++++++++++++++------------------ src/cmd/ps.c | 131 +++++++----------- src/cmd/su.c | 66 ++++----- src/cmd/vmstat.c | 304 ++++++++++++++++++++-------------------- src/cmd/wall.c | 83 +++++------ src/cmd/write.c | 179 +++++++++++------------- 11 files changed, 893 insertions(+), 895 deletions(-) diff --git a/include/unistd.h b/include/unistd.h index cf48903..49b93db 100644 --- a/include/unistd.h +++ b/include/unistd.h @@ -156,6 +156,7 @@ int symlink(const char *target, const char *linkpath); int vhangup(void); int mknod(const char *, mode_t, dev_t); int reboot(int howto); +int ttyslot(void); #ifndef _VA_LIST_ # ifdef __GNUC__ diff --git a/src/cmd/bc.y b/src/cmd/bc.y index 982c86f..3807ada 100644 --- a/src/cmd/bc.y +++ b/src/cmd/bc.y @@ -1,5 +1,8 @@ %{ - int *getout(); + int *getout(void); + int getch(void); + int cpeek(int c, int yes, int no); + void yyerror(char *s); %} %right '=' %left '+' '-' @@ -39,12 +42,12 @@ int *pre, *post; %% start : | start stat tail - = output( $2 ); + = output( (int*) $2 ); | start def dargs ')' '{' dlist slist '}' - ={ bundle( 6,pre, $7, post ,"0",numb[lev],"Q"); - conout( $$, $2 ); + ={ bundle(6, pre, $7, post, "0", numb[lev], "Q"); + conout( (int*) $$, (char*) $2 ); rcrs = crs; - output( "" ); + output( (int*) "" ); lev = bindx = 0; } ; @@ -62,11 +65,11 @@ stat : e | LETTER '=' e ={ bundle(3, $3, "s", $1 ); } | LETTER '[' e ']' '=' e - ={ bundle(4, $6, $3, ":", geta($1)); } + ={ bundle(4, $6, $3, ":", geta((char*) $1)); } | LETTER EQOP e ={ bundle(6, "l", $1, $3, $2, "s", $1 ); } | LETTER '[' e ']' EQOP e - ={ bundle(8,$3, ";", geta($1), $6, $5, $3, ":", geta($1));} + ={ bundle(8,$3, ";", geta((char*) $1), $6, $5, $3, ":", geta((char*) $1));} | _BREAK ={ bundle(2, numb[lev-bstack[bindx-1]], "Q" ); } | _RETURN '(' e ')' @@ -94,17 +97,17 @@ stat : e | error ={ bundle(1,"c"); } | _IF CRS BLEV '(' re ')' stat - ={ conout( $7, $2 ); + ={ conout( (int*) $7, (char*) $2 ); bundle(3, $5, $2, " " ); } | _WHILE CRS '(' re ')' stat BLEV ={ bundle(3, $6, $4, $2 ); - conout( $$, $2 ); + conout( (int*) $$, (char*) $2 ); bundle(3, $4, $2, " " ); } | fprefix CRS re ';' e ')' stat BLEV ={ bundle(5, $7, $5, "s.", $3, $2 ); - conout( $$, $2 ); + conout( (int*) $$, (char*) $2 ); bundle(5, $1, "s.", $3, $2, " " ); } | '~' LETTER '=' e @@ -174,7 +177,7 @@ e : e '+' e | e '^' e = bundle(3, $1, $3, "^" ); | LETTER '[' e ']' - ={ bundle(3,$3, ";", geta($1)); } + ={ bundle(3,$3, ";", geta((char*) $1)); } | LETTER INCR = bundle(4, "l", $1, "d1+s", $1 ); | INCR LETTER @@ -184,13 +187,13 @@ e : e '+' e | LETTER DECR = bundle(4, "l", $1, "d1-s", $1 ); | LETTER '[' e ']' INCR - = bundle(7,$3,";",geta($1),"d1+",$3,":",geta($1)); + = bundle(7,$3,";",geta((char*) $1),"d1+",$3,":",geta((char*) $1)); | INCR LETTER '[' e ']' - = bundle(7,$4,";",geta($2),"1+d",$4,":",geta($2)); + = bundle(7,$4,";",geta((char*) $2),"1+d",$4,":",geta((char*) $2)); | LETTER '[' e ']' DECR - = bundle(7,$3,";",geta($1),"d1-",$3,":",geta($1)); + = bundle(7,$3,";",geta((char*) $1),"d1-",$3,":",geta((char*) $1)); | DECR LETTER '[' e ']' - = bundle(7,$4,";",geta($2),"1-d",$4,":",geta($2)); + = bundle(7,$4,";",geta((char*) $2),"1-d",$4,":",geta((char*) $2)); | SCALE INCR = bundle(1,"Kd1+k"); | INCR SCALE @@ -216,9 +219,9 @@ e : e '+' e | DECR OBASE = bundle(1,"O1-do"); | LETTER '(' cargs ')' - = bundle(4, $3, "l", getf($1), "x" ); + = bundle(4, $3, "l", getf((char*) $1), "x" ); | LETTER '(' ')' - = bundle(3, "l", getf($1), "x" ); + = bundle(3, "l", getf((char*) $1), "x" ); | cons ={ bundle(2, " ", $1 ); } | DOT cons @@ -236,9 +239,9 @@ e : e '+' e | LETTER EQOP e %prec '=' ={ bundle(6, "l", $1, $3, $2, "ds", $1 ); } | LETTER '[' e ']' '=' e - = { bundle(5,$6,"d",$3,":",geta($1)); } + = { bundle(5,$6,"d",$3,":",geta((char*) $1)); } | LETTER '[' e ']' EQOP e - = { bundle(9,$3,";",geta($1),$6,$5,"d",$3,":",geta($1)); } + = { bundle(9,$3,";",geta((char*) $1),$6,$5,"d",$3,":",geta((char*) $1)); } | LENGTH '(' e ')' = bundle(2,$3,"Z"); | SCALE '(' e ')' @@ -277,7 +280,7 @@ cargs : eora ; eora: e | LETTER '[' ']' - =bundle(2,"l",geta($1)); + =bundle(2,"l",geta((char*) $1)); ; cons : constant @@ -303,7 +306,7 @@ CRS : ; def : _DEFINE LETTER '(' - ={ $$ = (int) getf($2); + ={ $$ = (int) getf((char*) $2); pre = (int*) ""; post = (int*) ""; lev = 1; @@ -313,19 +316,19 @@ def : _DEFINE LETTER '(' dargs : | lora - ={ pp( $1 ); } + ={ pp((char*) $1); } | dargs ',' lora - ={ pp( $3 ); } + ={ pp((char*) $3); } ; dlets : lora - ={ tp($1); } + ={ tp((char*) $1); } | dlets ',' lora - ={ tp($3); } + ={ tp((char*) $3); } ; lora : LETTER | LETTER '[' ']' - ={ $$ = (int) geta($1); } + ={ $$ = (int) geta((char*) $1); } ; %% @@ -348,7 +351,9 @@ char *letr[26] = { "k","l","m","n","o","p","q","r","s","t", "u","v","w","x","y","z" } ; char *dot = { "." }; -yylex(){ + +int yylex() +{ int c, ch; restart: c = getch(); @@ -445,7 +450,8 @@ restart: } } -cpeek( c, yes, no ){ +int cpeek(int c, int yes, int no) +{ if( (peekc=getch()) != c ) return( no ); else { peekc = -1; @@ -453,7 +459,8 @@ cpeek( c, yes, no ){ } } -getch(){ +int getch() +{ int ch; loop: ch = (peekc < 0) ? getc(in) : peekc; @@ -472,13 +479,18 @@ loop: goto loop; } yyerror("cannot open input file"); + return EOF; } + # define b_sp_max 3000 + int b_space [ b_sp_max ]; int * b_sp_nxt = { b_space }; int bdebug = 0; -bundle(a){ + +int bundle(int a, ...) +{ int i, *p, *q; p = &a; @@ -494,16 +506,18 @@ bundle(a){ return( (int) q ); } -routput(p) int *p; { +void routput(int *p) +{ if( bdebug ) printf("routput(%p)\n", p ); if( p >= &b_space[0] && p < &b_space[b_sp_max]){ /* part of a bundle */ - while( *p != 0 ) routput( *p++ ); + while( *p != 0 ) routput( (int*) *p++ ); } else printf( "%s", (char*) p ); /* character string */ } -output( p ) int *p; { +void output(int *p) +{ routput( p ); b_sp_nxt = & b_space[0]; printf( "\n" ); @@ -512,7 +526,8 @@ output( p ) int *p; { crs = rcrs; } -conout( p, s ) int *p; char *s; { +void conout(int *p, char *s) +{ printf("["); routput( p ); printf("]s%s\n", s ); @@ -520,7 +535,8 @@ conout( p, s ) int *p; char *s; { lev--; } -yyerror( s ) char *s; { +void yyerror(char *s) +{ if(ifile > sargc)ss="teletype"; printf("c[%s on line %d, %s]pc\n", s ,ln+1,ss); fflush(stdout); @@ -531,7 +547,8 @@ yyerror( s ) char *s; { b_sp_nxt = &b_space[0]; } -pp( s ) char *s; { +void pp(char *s) +{ /* puts the relevant stuff on pre and post for the letter s */ bundle(3, "S", s, pre ); @@ -540,14 +557,17 @@ pp( s ) char *s; { post = (int*) yyval; } -tp( s ) char *s; { /* same as pp, but for temps */ +/* same as pp, but for temps */ +void tp(char *s) +{ bundle(3, "0S", s, pre ); pre = (int*) yyval; bundle(4, post, "L", s, "s." ); post = (int*) yyval; } -yyinit(argc,argv) int argc; char *argv[];{ +void yyinit(int argc, char *argv[]) +{ signal( 2, SIG_IGN ); /* ignore all interrupts */ sargv=argv; sargc= -- argc; @@ -560,24 +580,25 @@ yyinit(argc,argv) int argc; char *argv[];{ ln = 0; ss = sargv[1]; } -int *getout(){ + +int *getout() +{ printf("q"); fflush(stdout); exit(0); } -int * -getf(p) char *p;{ +int *getf(char *p) +{ return (int*) &funtab[2 * (*p - 0141)]; } -int * -geta(p) char *p;{ +int *geta(char *p) +{ return (int*) &atab[2 * (*p - 0141)]; } -main(argc, argv) -char **argv; +int main(int argc, char **argv) { int p[2]; diff --git a/src/cmd/egrep.y b/src/cmd/egrep.y index e119b36..c98fa5d 100644 --- a/src/cmd/egrep.y +++ b/src/cmd/egrep.y @@ -15,6 +15,8 @@ %{ #include #include +#include +#include #include #include @@ -24,6 +26,7 @@ #define NCHARS 128 #define NSTATES 128 #define FINAL -1 + char gotofn[NSTATES][NCHARS]; int state[NSTATES]; char out[NSTATES]; @@ -62,6 +65,16 @@ int nsucc; int f; char *fname; + +int nextch(void); +void synerror(void); +void overflo(void); +void follow(int v); +void add(int *array, int n); +int cstate(int v); +int member(int symb, int set, int torf); +int notin(int n); +void execute(char *file); %} %% @@ -109,15 +122,18 @@ r: r OR r ; %% -yyerror(s) { +void yyerror(char *s) +{ fprintf(stderr, "egrep: %s\n", s); exit(2); } -yylex() { +int yylex() +{ extern int yylval; int cclcnt, x; - register char c, d; + char c, d; + switch(c = nextch()) { case '$': case '^': c = '\n'; @@ -140,32 +156,39 @@ yylex() { c = nextch(); } do { - if (c == '\0') synerror(); + if (c == '\0') + synerror(); if (c == '-' && cclcnt > 0 && chars[nxtchar-1] != 0) { if ((d = nextch()) != 0) { c = chars[nxtchar-1]; while (c < d) { - if (nxtchar >= MAXLIN) overflo(); + if (nxtchar >= MAXLIN) + overflo(); chars[nxtchar++] = ++c; cclcnt++; } continue; } } - if (nxtchar >= MAXLIN) overflo(); + if (nxtchar >= MAXLIN) + overflo(); chars[nxtchar++] = c; cclcnt++; } while ((c = nextch()) != ']'); chars[count] = cclcnt; return (x); case '\\': - if ((c = nextch()) == '\0') synerror(); + if ((c = nextch()) == '\0') + synerror(); defchar: default: yylval = c; return (CHAR); } } -nextch() { - register char c; + +int nextch() +{ + char c; + if (fflag) { if ((c = getc(exprfile)) == EOF) { fclose(exprfile); @@ -176,28 +199,35 @@ nextch() { return(c); } -synerror() { +void synerror() +{ fprintf(stderr, "egrep: syntax error\n"); exit(2); } -enter(x) int x; { - if(line >= MAXLIN) overflo(); +int enter(int x) +{ + if(line >= MAXLIN) + overflo(); name[line] = x; left[line] = 0; right[line] = 0; return(line++); } -cclenter(x) int x; { - register linno; +int cclenter(int x) +{ + int linno; + linno = enter(x); right[linno] = count; return (linno); } -node(x, l, r) { - if(line >= MAXLIN) overflo(); +int node(int x, int l, int r) +{ + if(line >= MAXLIN) + overflo(); name[line] = x; left[line] = l; right[line] = r; @@ -206,21 +236,27 @@ node(x, l, r) { return(line++); } -unary(x, d) { - if(line >= MAXLIN) overflo(); +int unary(int x, int d) +{ + if(line >= MAXLIN) + overflo(); name[line] = x; left[line] = d; right[line] = 0; parent[d] = line; return(line++); } -overflo() { + +void overflo() +{ fprintf(stderr, "egrep: regular expression too long\n"); exit(2); } -cfoll(v) { - register i; +void cfoll(int v) +{ + int i; + if (left[v] == 0) { count = 0; for (i=1; i<=line; i++) tmpstat[i] = 0; @@ -233,8 +269,10 @@ cfoll(v) { cfoll(right[v]); } } -cgotofn() { - register c, i, k; + +void cgotofn() +{ + int c, i, k; int n, s; char symbol[NCHARS]; int j, nc, pc, pos; @@ -242,7 +280,7 @@ cgotofn() { int number, newpos; count = 0; for (n=3; n<=line; n++) tmpstat[n] = 0; - if (cstate(line-1)==0) { + if (cstate(line-1) == 0) { tmpstat[line] = 1; count++; out[0] = 1; @@ -327,8 +365,10 @@ cgotofn() { } } -cstate(v) { - register b; +int cstate(int v) +{ + int b; + if (left[v] == 0) { if (tmpstat[v] != 1) { tmpstat[v] = 1; @@ -352,9 +392,10 @@ cstate(v) { } } +int member(int symb, int set, int torf) +{ + int i, num, pos; -member(symb, set, torf) { - register i, num, pos; num = chars[set]; pos = set + 1; for (i=0; i MAXPOS) overflo(); +void add(int *array, int n) +{ + int i; + + if (nxtpos + count > MAXPOS) + overflo(); array[n] = nxtpos; positions[nxtpos++] = count; for (i=3; i <= line; i++) { @@ -389,7 +435,8 @@ add(array, n) int *array; { } } -follow(v) int v; { +void follow(int v) +{ int p; if (v == line) return; p = parent[v]; @@ -419,9 +466,7 @@ follow(v) int v; { } } - -main(argc, argv) -char **argv; +int main(int argc, char **argv) { while (--argc > 0 && (++argv)[0][0]=='-') switch (argv[0][1]) { @@ -498,12 +543,11 @@ out: exit(retcode != 0 ? retcode : nsucc == 0); } -execute(file) -char *file; +void execute(char *file) { - register char *p; - register cstat; - register ccount; + char *p; + int cstat; + int ccount; static char *buf; static int blksize; struct stat stb; @@ -541,7 +585,8 @@ char *file; for (;;) { cstat = gotofn[cstat][*p&0377]; /* all input chars made positive */ if (out[cstat]) { - found: for(;;) { +found: + for(;;) { if (*p++ == '\n') { if (vflag == 0) { succeed: nsucc = 1; @@ -592,7 +637,7 @@ char *file; if (out[(cstat=istat)]) goto cfound; } } - brk2: +brk2: if (--ccount <= 0) { if (p <= &buf[blksize]) { if ((ccount = read(f, p, blksize)) <= 0) break; @@ -607,7 +652,8 @@ char *file; blkno += ccount / 512; } } -done: close(f); +done: + close(f); if (cflag) { if (nfile > 1) printf("%s:", file); diff --git a/src/cmd/expr.y b/src/cmd/expr.y index 0b81aca..0300429 100644 --- a/src/cmd/expr.y +++ b/src/cmd/expr.y @@ -1,3 +1,12 @@ +%{ + int ematch(char *s, char *p); + void yyerror(char *s); + int advance(char *lp, char *ep); + char *compile(char *instring, char *ep, char *endbuf, int seof); + void getrnge(char *str); + int ecmp(char *a, char *b, int count); +%} + /* Yacc productions for "expr" command: */ %token OR AND ADD SUBT MULT DIV REM EQ GT GEQ LT LEQ NEQ @@ -18,7 +27,7 @@ /* a single `expression' is evaluated and printed: */ expression: expr NOARG = { - printf("%s\n", $1); + printf("%s\n", (char*) $1); exit((! strcmp((char*) $1, "0") || ! strcmp((char*) $1, "\0")) ? 1 : 0); } @@ -26,24 +35,24 @@ expression: expr NOARG = { expr: '(' expr ')' = { $$ = (int) $2; } - | expr OR expr = { $$ = (int) conju(OR, $1, $3); } - | expr AND expr = { $$ = (int) conju(AND, $1, $3); } - | expr EQ expr = { $$ = (int) rel(EQ, $1, $3); } - | expr GT expr = { $$ = (int) rel(GT, $1, $3); } - | expr GEQ expr = { $$ = (int) rel(GEQ, $1, $3); } - | expr LT expr = { $$ = (int) rel(LT, $1, $3); } - | expr LEQ expr = { $$ = (int) rel(LEQ, $1, $3); } - | expr NEQ expr = { $$ = (int) rel(NEQ, $1, $3); } - | expr ADD expr = { $$ = (int) arith(ADD, $1, $3); } - | expr SUBT expr = { $$ = (int) arith(SUBT, $1, $3); } - | expr MULT expr = { $$ = (int) arith(MULT, $1, $3); } - | expr DIV expr = { $$ = (int) arith(DIV, $1, $3); } - | expr REM expr = { $$ = (int) arith(REM, $1, $3); } - | expr MCH expr = { $$ = (int) match($1, $3); } - | MATCH expr expr = { $$ = (int) match($2, $3); } - | SUBSTR expr expr expr = { $$ = (int) substr($2, $3, $4); } - | LENGTH expr = { $$ = (int) length($2); } - | INDEX expr expr = { $$ = (int) cindex($2, $3); } + | expr OR expr = { $$ = (int) conju(OR, (char*) $1, (char*) $3); } + | expr AND expr = { $$ = (int) conju(AND, (char*) $1, (char*) $3); } + | expr EQ expr = { $$ = (int) rel(EQ, (char*) $1, (char*) $3); } + | expr GT expr = { $$ = (int) rel(GT, (char*) $1, (char*) $3); } + | expr GEQ expr = { $$ = (int) rel(GEQ, (char*) $1, (char*) $3); } + | expr LT expr = { $$ = (int) rel(LT, (char*) $1, (char*) $3); } + | expr LEQ expr = { $$ = (int) rel(LEQ, (char*) $1, (char*) $3); } + | expr NEQ expr = { $$ = (int) rel(NEQ, (char*) $1, (char*) $3); } + | expr ADD expr = { $$ = (int) arith(ADD, (char*) $1, (char*) $3); } + | expr SUBT expr = { $$ = (int) arith(SUBT, (char*) $1, (char*) $3); } + | expr MULT expr = { $$ = (int) arith(MULT, (char*) $1, (char*) $3); } + | expr DIV expr = { $$ = (int) arith(DIV, (char*) $1, (char*) $3); } + | expr REM expr = { $$ = (int) arith(REM, (char*) $1, (char*) $3); } + | expr MCH expr = { $$ = (int) match((char*) $1, (char*) $3); } + | MATCH expr expr = { $$ = (int) match((char*) $2, (char*) $3); } + | SUBSTR expr expr expr = { $$ = (int) substr((char*) $2, (char*) $3, (char*) $4); } + | LENGTH expr = { $$ = (int) length((char*) $2); } + | INDEX expr expr = { $$ = (int) cindex((char*) $2, (char*) $3); } | A_STRING ; %% @@ -55,7 +64,7 @@ expr: '(' expr ')' = { $$ = (int) $2; } #define ESIZE 256 #define error(c) errxx(c) #define EQL(x,y) !strcmp(x,y) -long atol(); + char **Av; int Ac; int Argi; @@ -63,47 +72,53 @@ int Argi; char Mstring[1][128]; extern int nbra; -main(argc, argv) char **argv; { +int main(int argc, char **argv) +{ Ac = argc; Argi = 1; Av = argv; yyparse(); } -char *operators[] = { "|", "&", "+", "-", "*", "/", "%", ":", +char *operators[] = { + "|", "&", "+", "-", "*", "/", "%", ":", "=", "==", "<", "<=", ">", ">=", "!=", - "match", "substr", "length", "index", "\0" }; -int op[] = { OR, AND, ADD, SUBT, MULT, DIV, REM, MCH, + "match", "substr", "length", "index", "\0" +}; + +int op[] = { + OR, AND, ADD, SUBT, MULT, DIV, REM, MCH, EQ, EQ, LT, LEQ, GT, GEQ, NEQ, - MATCH, SUBSTR, LENGTH, INDEX }; + MATCH, SUBSTR, LENGTH, INDEX +}; -yylex() +int yylex() { - register char *p; - register i; + char *p; + int i; - if(Argi >= Ac) return NOARG; + if (Argi >= Ac) return NOARG; p = Av[Argi++]; - if(*p == '(' || *p == ')') + if (*p == '(' || *p == ')') return (int)*p; - for(i = 0; *operators[i]; ++i) - if(EQL(operators[i], p)) + for (i = 0; *operators[i]; ++i) + if (EQL(operators[i], p)) return op[i]; yylval = (int) p; return A_STRING; } -char *rel(op, r1, r2) register char *r1, *r2; +char *rel(int op, char *r1, char *r2) { - register long i; + long i; - if(ematch(r1, "-*[0-9]*$") && ematch(r2, "[0-9]*$")) + if (ematch(r1, "-*[0-9]*$") && ematch(r2, "[0-9]*$")) i = atol(r1) - atol(r2); else i = strcmp(r1, r2); - switch(op) { + switch (op) { case EQ: i = i==0; break; case GT: i = i>0; break; case GEQ: i = i>=0; break; @@ -114,17 +129,17 @@ char *rel(op, r1, r2) register char *r1, *r2; return i? "1": "0"; } -char *arith(op, r1, r2) char *r1, *r2; +char *arith(int op, char *r1, char *r2) { long i1, i2; - register char *rv; + char *rv; - if(!(ematch(r1, "[0-9]*$") && ematch(r2, "[0-9]*$"))) + if (!(ematch(r1, "[0-9]*$") && ematch(r2, "[0-9]*$"))) yyerror("non-numeric argument"); i1 = atol(r1); i2 = atol(r2); - switch(op) { + switch (op) { case ADD: i1 = i1 + i2; break; case SUBT: i1 = i1 - i2; break; case MULT: i1 = i1 * i2; break; @@ -132,20 +147,20 @@ char *arith(op, r1, r2) char *r1, *r2; case REM: i1 = i1 % i2; break; } rv = malloc(16); - sprintf(rv, "%D", i1); + sprintf(rv, "%ld", i1); return rv; } -char *conju(op, r1, r2) char *r1, *r2; +char *conju(int op, char *r1, char *r2) { - register char *rv; + char *rv; - switch(op) { + switch (op) { case OR: - if(EQL(r1, "0") + if (EQL(r1, "0") || EQL(r1, "")) - if(EQL(r2, "0") + if (EQL(r2, "0") || EQL(r2, "")) rv = "0"; else @@ -154,10 +169,10 @@ char *conju(op, r1, r2) char *r1, *r2; rv = r1; break; case AND: - if(EQL(r1, "0") + if (EQL(r1, "0") || EQL(r1, "")) rv = "0"; - else if(EQL(r2, "0") + else if (EQL(r2, "0") || EQL(r2, "")) rv = "0"; else @@ -167,94 +182,89 @@ char *conju(op, r1, r2) char *r1, *r2; return rv; } -char *substr(v, s, w) char *v, *s, *w; +char *substr(char *v, char *s, char *w) { -register si, wi; -register char *res; + int si, wi; + char *res; si = atol(s); wi = atol(w); - while(--si) if(*v) ++v; + while (--si) if (*v) ++v; res = v; - while(wi--) if(*v) ++v; + while (wi--) if (*v) ++v; *v = '\0'; return res; } -char *length(s) register char *s; +char *length(char *s) { - register i = 0; - register char *rv; + int i = 0; + char *rv; - while(*s++) ++i; + while (*s++) ++i; rv = malloc(8); sprintf(rv, "%d", i); return rv; } -char *cindex(s, t) char *s, *t; +char *cindex(char *s, char *t) { - register i, j; - register char *rv; + int i, j; + char *rv; - for(i = 0; s[i] ; ++i) - for(j = 0; t[j] ; ++j) - if(s[i]==t[j]) { + for (i = 0; s[i] ; ++i) + for (j = 0; t[j] ; ++j) + if (s[i]==t[j]) { sprintf(rv = malloc(8), "%d", ++i); return rv; } return "0"; } -char *match(s, p) +char *match(char *s, char *p) { - register char *rv; + char *rv = malloc(8); - sprintf(rv = malloc(8), "%d", ematch(s, p)); - if(nbra) { + sprintf(rv, "%d", ematch(s, p)); + if (nbra) { rv = malloc(strlen(Mstring[0])+1); strcpy(rv, Mstring[0]); } return rv; } -#define INIT register char *sp = instring; +#define INIT char *sp = instring; #define GETC() (*sp++) #define PEEKC() (*sp) #define UNGETC(c) (--sp) -#define RETURN(c) return #define ERROR(c) errxx(c) - -ematch(s, p) -char *s; -register char *p; +int ematch(char *s, char *p) { static char expbuf[ESIZE]; - char *compile(); - register num; + int num; extern char *braslist[], *braelist[], *loc2; compile(p, expbuf, &expbuf[ESIZE], 0); - if(nbra > 1) + if (nbra > 1) yyerror("Too many '\\('s"); - if(advance(s, expbuf)) { - if(nbra == 1) { + if (advance(s, expbuf)) { + if (nbra == 1) { p = braslist[0]; num = braelist[0] - p; strncpy(Mstring[0], p, num); Mstring[0][num] = '\0'; } - return(loc2-s); + return loc2-s; } - return(0); + return 0; } -errxx(c) +void errxx(c) { yyerror("RE error"); } @@ -276,8 +286,8 @@ errxx(c) #define PLACE(c) ep[c >> 3] |= bittab[c & 07] #define ISTHERE(c) (ep[c >> 3] & bittab[c & 07]) -char *braslist[NBRA]; -char *braelist[NBRA]; +char *braslist[NBRA]; +char *braelist[NBRA]; int nbra; char *loc1, *loc2, *locs; int sed; @@ -286,7 +296,7 @@ int circf; int low; int size; -char bittab[] = { +char bittab[] = { 1, 2, 4, @@ -297,14 +307,11 @@ char bittab[] = { 128 }; -char * -compile(instring, ep, endbuf, seof) -register char *ep; -char *instring, *endbuf; +char *compile(char *instring, char *ep, char *endbuf, int seof) { INIT /* Dependent declarations and initializations */ - register c; - register eof = seof; + int c; + int eof = seof; char *lastep = instring; int cclcnt; char bracket[NBRA], *bracketp; @@ -314,10 +321,10 @@ char *instring, *endbuf; int i, cflg; lastep = 0; - if((c = GETC()) == eof) { - if(*ep == 0 && !sed) + if ((c = GETC()) == eof) { + if (*ep == 0 && !sed) ERROR(41); - RETURN(ep); + return ep; } bracketp = bracket; circf = closed = nbra = 0; @@ -328,11 +335,11 @@ char *instring, *endbuf; for (;;) { if (ep >= endbuf) ERROR(50); - if((c = GETC()) != '*' && ((c != '\\') || (PEEKC() != '{'))) + if ((c = GETC()) != '*' && ((c != '\\') || (PEEKC() != '{'))) lastep = ep; if (c == eof) { *ep++ = CEOF; - RETURN(ep); + return ep; } switch (c) { @@ -349,44 +356,44 @@ char *instring, *endbuf; continue; case '$': - if(PEEKC() != eof) + if (PEEKC() != eof) goto defchar; *ep++ = CDOL; continue; case '[': - if(&ep[17] >= endbuf) + if (&ep[17] >= endbuf) ERROR(50); *ep++ = CCL; lc = 0; - for(i = 0; i < 16; i++) + for (i = 0; i < 16; i++) ep[i] = 0; neg = 0; - if((c = GETC()) == '^') { + if ((c = GETC()) == '^') { neg = 1; c = GETC(); } do { - if(c == '\0' || c == '\n') + if (c == '\0' || c == '\n') ERROR(49); - if(c == '-' && lc != 0) { + if (c == '-' && lc != 0) { if ((c = GETC()) == ']') { PLACE('-'); break; } - while(lc < c) { + while (lc < c) { PLACE(lc); lc++; } } lc = c; PLACE(c); - } while((c = GETC()) != ']'); - if(neg) { - for(cclcnt = 0; cclcnt < 16; cclcnt++) + } while ((c = GETC()) != ']'); + if (neg) { + for (cclcnt = 0; cclcnt < 16; cclcnt++) ep[cclcnt] ^= -1; ep[0] &= 0376; } @@ -396,10 +403,10 @@ char *instring, *endbuf; continue; case '\\': - switch(c = GETC()) { + switch (c = GETC()) { case '(': - if(nbra >= NBRA) + if (nbra >= NBRA) ERROR(43); *bracketp++ = nbra; *ep++ = CBRA; @@ -407,7 +414,7 @@ char *instring, *endbuf; continue; case ')': - if(bracketp <= bracket) + if (bracketp <= bracket) ERROR(42); *ep++ = CKET; *ep++ = *--bracketp; @@ -415,7 +422,7 @@ char *instring, *endbuf; continue; case '{': - if(lastep == (char *) (0)) + if (lastep == (char *) (0)) goto defchar; *lastep |= RNGE; cflg = 0; @@ -427,25 +434,25 @@ char *instring, *endbuf; i = 10 * i + c - '0'; else ERROR(16); - } while(((c = GETC()) != '\\') && (c != ',')); + } while (((c = GETC()) != '\\') && (c != ',')); if (i > 255) ERROR(11); *ep++ = i; if (c == ',') { - if(cflg++) + if (cflg++) ERROR(44); - if((c = GETC()) == '\\') - *ep++ = 255; + if ((c = GETC()) == '\\') + *ep++ = '\377'; else { UNGETC(c); goto nlim; /* get 2'nd number */ } } - if(GETC() != '}') + if (GETC() != '}') ERROR(45); - if(!cflg) /* one number */ + if (!cflg) /* one number */ *ep++ = i; - else if((ep[-1] & 0377) < (ep[-2] & 0377)) + else if ((ep[-1] & 0377) < (ep[-2] & 0377)) ERROR(46); continue; @@ -457,8 +464,8 @@ char *instring, *endbuf; goto defchar; default: - if(c >= '1' && c <= '9') { - if((c -= '1') >= closed) + if (c >= '1' && c <= '9') { + if ((c -= '1') >= closed) ERROR(25); *ep++ = CBACK; *ep++ = c; @@ -476,14 +483,13 @@ char *instring, *endbuf; } } -step(p1, p2) -register char *p1, *p2; +int step(char *p1, char *p2) { - register c; + int c; if (circf) { loc1 = p1; - return(advance(p1, p2)); + return advance(p1, p2); } /* fast check for first character */ if (*p2==CCHR) { @@ -493,25 +499,24 @@ register char *p1, *p2; continue; if (advance(p1, p2)) { loc1 = p1; - return(1); + return 1; } } while (*p1++); - return(0); + return 0; } /* regular algorithm */ do { if (advance(p1, p2)) { loc1 = p1; - return(1); + return 1; } } while (*p1++); - return(0); + return 0; } -advance(lp, ep) -register char *lp, *ep; +int advance(char *lp, char *ep) { - register char *curlp; + char *curlp; char c; char *bbeg; int ct; @@ -521,29 +526,29 @@ register char *lp, *ep; case CCHR: if (*ep++ == *lp++) continue; - return(0); + return 0; case CDOT: if (*lp++) continue; - return(0); + return 0; case CDOL: if (*lp==0) continue; - return(0); + return 0; case CEOF: loc2 = lp; - return(1); + return 1; case CCL: c = *lp++ & 0177; - if(ISTHERE(c)) { + if (ISTHERE(c)) { ep += 16; continue; } - return(0); + return 0; case CBRA: braslist[*ep++] = lp; continue; @@ -555,46 +560,46 @@ register char *lp, *ep; case CCHR|RNGE: c = *ep++; getrnge(ep); - while(low--) - if(*lp++ != c) - return(0); + while (low--) + if (*lp++ != c) + return 0; curlp = lp; - while(size--) - if(*lp++ != c) + while (size--) + if (*lp++ != c) break; - if(size < 0) + if (size < 0) lp++; ep += 2; goto star; case CDOT|RNGE: getrnge(ep); - while(low--) - if(*lp++ == '\0') - return(0); + while (low--) + if (*lp++ == '\0') + return 0; curlp = lp; - while(size--) - if(*lp++ == '\0') + while (size--) + if (*lp++ == '\0') break; - if(size < 0) + if (size < 0) lp++; ep += 2; goto star; case CCL|RNGE: getrnge(ep + 16); - while(low--) { + while (low--) { c = *lp++ & 0177; - if(!ISTHERE(c)) - return(0); + if (!ISTHERE(c)) + return 0; } curlp = lp; - while(size--) { + while (size--) { c = *lp++ & 0177; - if(!ISTHERE(c)) + if (!ISTHERE(c)) break; } - if(size < 0) + if (size < 0) lp++; ep += 18; /* 16 + 2 */ goto star; @@ -603,24 +608,24 @@ register char *lp, *ep; bbeg = braslist[*ep]; ct = braelist[*ep++] - bbeg; - if(ecmp(bbeg, lp, ct)) { + if (ecmp(bbeg, lp, ct)) { lp += ct; continue; } - return(0); + return 0; case CBACK|STAR: bbeg = braslist[*ep]; ct = braelist[*ep++] - bbeg; curlp = lp; - while(ecmp(bbeg, lp, ct)) + while (ecmp(bbeg, lp, ct)) lp += ct; - while(lp >= curlp) { - if(advance(lp, ep)) return(1); + while (lp >= curlp) { + if (advance(lp, ep)) return 1; lp -= ct; } - return(0); + return 0; case CDOT|STAR: @@ -638,43 +643,39 @@ register char *lp, *ep; curlp = lp; do { c = *lp++ & 0177; - } while(ISTHERE(c)); + } while (ISTHERE(c)); ep += 16; goto star; star: do { - if(--lp == locs) + if (--lp == locs) break; if (advance(lp, ep)) - return(1); + return 1; } while (lp > curlp); - return(0); + return 0; } } -getrnge(str) -register char *str; +void getrnge(char *str) { low = *str++ & 0377; - size = *str == 255 ? 20000 : (*str &0377) - low; + size = *str == '\377' ? 20000 : (*str & 0377) - low; } -ecmp(a, b, count) -register char *a, *b; -register count; +int ecmp(char *a, char *b, int count) { - if(a == b) /* should have been caught in compile() */ + if (a == b) /* should have been caught in compile() */ error(51); - while(count--) - if(*a++ != *b++) - return(0); - return(1); + while (count--) + if (*a++ != *b++) + return 0; + return 1; } -yyerror(s) -char *s; +void yyerror(char *s) { fprintf(stderr, "%s\n", s); exit(2); diff --git a/src/cmd/iostat.c b/src/cmd/iostat.c index b168f8f..ee8ab69 100644 --- a/src/cmd/iostat.c +++ b/src/cmd/iostat.c @@ -1,44 +1,43 @@ /* * iostat */ -#include -#include -#include #include #include #include - -#include -#include -#include +#include +#include +#include +#include +#include #include +#include struct nlist nl[] = { { "_dk_busy" }, -#define X_DK_BUSY 0 +#define X_DK_BUSY 0 { "_dk_xfer" }, -#define X_DK_XFER 1 +#define X_DK_XFER 1 { "_dk_bytes" }, -#define X_DK_BYTES 2 +#define X_DK_BYTES 2 { "_tk_nin" }, -#define X_TK_NIN 3 +#define X_TK_NIN 3 { "_tk_nout" }, -#define X_TK_NOUT 4 +#define X_TK_NOUT 4 { "_cp_time" }, -#define X_CP_TIME 5 +#define X_CP_TIME 5 { "_hz" }, -#define X_HZ 6 +#define X_HZ 6 { "_dk_ndrive" }, #define X_DK_NDRIVE 7 { "_dk_name" }, -#define X_DK_NAME 8 +#define X_DK_NAME 8 { "_dk_unit" }, -#define X_DK_UNIT 9 +#define X_DK_UNIT 9 { 0 }, }; -char **dr_name; -char **dk_name; +char **dr_name; +char **dk_name; int *dr_select; int *dk_unit; int dk_ndrive; @@ -46,22 +45,25 @@ int ndrives = 0; struct { int dk_busy; - long cp_time[CPUSTATES]; - long *dk_bytes; - long *dk_xfer; - long tk_nin; - long tk_nout; + long cp_time[CPUSTATES]; + long *dk_bytes; + long *dk_xfer; + long tk_nin; + long tk_nout; } s, s1; int mf; int hz; -double etime; +double etime; int tohdr = 1; -void printhdr(sig) - int sig; +static void read_names(void); +static void stats(int dn); +static void stat1(int o); + +void printhdr(int sig) { - register int i; + int i; printf("---tty---"); for (i = 0; i < dk_ndrive; i++) @@ -77,23 +79,21 @@ void printhdr(sig) tohdr = 19; } -main(argc, argv) - char *argv[]; +int main(int argc, char *argv[]) { - extern char *ctime(); - register i; + int i; int iter; double f1, f2; long t; char *arg, **cp, name[6], buf[BUFSIZ]; knlist(nl); - if(nl[X_DK_BUSY].n_value == 0) { + if (nl[X_DK_BUSY].n_value == 0) { printf("dk_busy not found in /vmunix namelist\n"); exit(1); } mf = open("/dev/kmem", 0); - if(mf < 0) { + if (mf < 0) { printf("cannot open /dev/kmem\n"); exit(1); } @@ -105,19 +105,19 @@ main(argc, argv) exit(1); } lseek(mf, (long)nl[X_DK_NDRIVE].n_value, L_SET); - read(mf, &dk_ndrive, sizeof (dk_ndrive)); + read(mf, &dk_ndrive, sizeof(dk_ndrive)); if (dk_ndrive <= 0) { printf("dk_ndrive %d\n", dk_ndrive); exit(1); } - dr_select = (int *)calloc(dk_ndrive, sizeof (int)); - dr_name = (char **)calloc(dk_ndrive, sizeof (char *)); - dk_name = (char **)calloc(dk_ndrive, sizeof (char *)); - dk_unit = (int *)calloc(dk_ndrive, sizeof (int)); - s.dk_bytes = (long *)calloc(dk_ndrive, sizeof (long)); - s1.dk_bytes = (long *)calloc(dk_ndrive, sizeof (long)); - s.dk_xfer = (long *)calloc(dk_ndrive, sizeof (long)); - s1.dk_xfer = (long *)calloc(dk_ndrive, sizeof (long)); + dr_select = (int *)calloc(dk_ndrive, sizeof(int)); + dr_name = (char **)calloc(dk_ndrive, sizeof(char *)); + dk_name = (char **)calloc(dk_ndrive, sizeof(char *)); + dk_unit = (int *)calloc(dk_ndrive, sizeof(int)); + s.dk_bytes = (long *)calloc(dk_ndrive, sizeof(long)); + s1.dk_bytes = (long *)calloc(dk_ndrive, sizeof(long)); + s.dk_xfer = (long *)calloc(dk_ndrive, sizeof(long)); + s1.dk_xfer = (long *)calloc(dk_ndrive, sizeof(long)); for (arg = buf, i = 0; i < dk_ndrive; i++) { dr_name[i] = arg; sprintf(dr_name[i], "dk%d", i); @@ -155,15 +155,15 @@ main(argc, argv) signal(SIGCONT, printhdr); loop: if (--tohdr == 0) - printhdr(); + printhdr(0); lseek(mf, (long)nl[X_DK_BUSY].n_value, L_SET); read(mf, &s.dk_busy, sizeof s.dk_busy); lseek(mf, (long)nl[X_DK_XFER].n_value, L_SET); - read(mf, s.dk_xfer, dk_ndrive*sizeof (long)); + read(mf, s.dk_xfer, dk_ndrive * sizeof(long)); lseek(mf, (long)nl[X_DK_BYTES].n_value, L_SET); - read(mf, s.dk_bytes, dk_ndrive*sizeof (long)); + read(mf, s.dk_bytes, dk_ndrive * sizeof(long)); lseek(mf, (long)nl[X_TK_NIN].n_value, L_SET); read(mf, &s.tk_nin, sizeof s.tk_nin); @@ -175,26 +175,34 @@ loop: read(mf, s.cp_time, sizeof s.cp_time); for (i = 0; i < dk_ndrive; i++) { - if (! dr_select[i]) + if (!dr_select[i]) continue; -#define X(fld) t = s.fld[i]; s.fld[i] -= s1.fld[i]; s1.fld[i] = t - X(dk_xfer); X(dk_bytes); +#define X(fld) \ + t = s.fld[i]; \ + s.fld[i] -= s1.fld[i]; \ + s1.fld[i] = t + X(dk_xfer); + X(dk_bytes); } - t = s.tk_nin; s.tk_nin -= s1.tk_nin; s1.tk_nin = t; - t = s.tk_nout; s.tk_nout -= s1.tk_nout; s1.tk_nout = t; + t = s.tk_nin; + s.tk_nin -= s1.tk_nin; + s1.tk_nin = t; + t = s.tk_nout; + s.tk_nout -= s1.tk_nout; + s1.tk_nout = t; etime = 0; - for(i=0; i +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include -#include - -#include -#include -#include -#include -#include -#include -#include +#include #include -#include -#include #include #include +#include +#include - /* copylet flags */ -#define REMOTE 1 /* remote mail, add rmtmsg */ -#define ORDINARY 2 -#define ZAP 3 /* zap header and trailing empty line */ -#define FORWARD 4 +/* copylet flags */ +#define REMOTE 1 /* remote mail, add rmtmsg */ +#define ORDINARY 2 +#define ZAP 3 /* zap header and trailing empty line */ +#define FORWARD 4 -#define LSIZE 256 -#define MAXLET 300 /* maximum number of letters */ -#define MAILMODE 0600 /* mode of created mail */ +#define LSIZE 256 +#define MAXLET 300 /* maximum number of letters */ +#define MAILMODE 0600 /* mode of created mail */ + +char line[LSIZE]; +char resp[LSIZE]; -char line[LSIZE]; -char resp[LSIZE]; struct let { - long adr; - char change; + long adr; + char change; } let[MAXLET]; -int nlet = 0; -char lfil[50]; -long iop; -char lettmp[] = "/tmp/maXXXXX"; -char maildir[] = _PATH_MAIL; -char mailfile[] = _PATH_MAIL "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; -char dead[] = "dead.letter"; -char forwmsg[] = " forwarded\n"; -FILE *tmpf; -FILE *malf; -char my_name[60]; + +int nlet = 0; +char lfil[50]; +long iop; +char lettmp[] = "/tmp/maXXXXX"; +char maildir[] = _PATH_MAIL; +char mailfile[] = _PATH_MAIL "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; +char dead[] = "dead.letter"; +char forwmsg[] = " forwarded\n"; +FILE *tmpf; +FILE *malf; +char my_name[60]; int error; int changed; int forward; -char from[] = "From "; -int delex(); +char from[] = "From "; int flgf; int flgp; int delflg = 1; @@ -54,20 +57,35 @@ int hseqno; jmp_buf sjbuf; int rmail; -main(argc, argv) -char **argv; +static void done(void); +static void setsig(int i, sig_t f); +static void delex(int i); +static void panic(char *msg, ...); +static int any(int c, char *str); +static void printmail(int argc, char **argv); +static void bulkmail(int argc, char **argv); +static void cat(char *to, char *from1, char *from2); +static void copymt(FILE *f1, FILE *f2); +static void copylet(int n, FILE *f, int type); +static char *getarg(char *s, char *p); +static int sendmail(int n, char *name, char *fromaddr); +static void copyback(void); +static int isfrom(char *lp); +static void usage(void); +static int safefile(char *f); + +int main(int argc, char **argv) { - register int i; + int i; char *name; struct passwd *pwent; - if (!(name = getlogin()) || !*name || !(pwent = getpwnam(name)) || - getuid() != pwent->pw_uid) + if (!(name = getlogin()) || !*name || !(pwent = getpwnam(name)) || getuid() != pwent->pw_uid) pwent = getpwuid(getuid()); - strncpy(my_name, pwent ? pwent->pw_name : "???", sizeof(my_name)-1); + strncpy(my_name, pwent ? pwent->pw_name : "???", sizeof(my_name) - 1); if (setjmp(sjbuf)) done(); - for (i=SIGHUP; i<=SIGTERM; i++) + for (i = SIGHUP; i <= SIGTERM; i++) setsig(i, delex); i = mkstemp(lettmp); tmpf = fdopen(i, "r+w"); @@ -80,38 +98,32 @@ char **argv; unlink(lettmp); if (argv[0][0] == 'r') rmail++; - if (argv[0][0] != 'r' && /* no favors for rmail*/ - (argc == 1 || argv[1][0] == '-' && !any(argv[1][1], "rhd"))) + if (argv[0][0] != 'r' && /* no favors for rmail*/ + (argc == 1 || argv[1][0] == '-' && !any(argv[1][1], "rhd"))) printmail(argc, argv); else bulkmail(argc, argv); done(); } -setsig(i, f) -int i; -sig_t f; +void setsig(int i, sig_t f) { if (signal(i, SIG_IGN) != SIG_IGN) signal(i, f); } -any(c, str) - register int c; - register char *str; +int any(int c, char *str) { - while (*str) if (c == *str++) - return(1); - return(0); + return (1); + return (0); } -printmail(argc, argv) - char **argv; +void printmail(int argc, char **argv) { int flg, i, j, print; - char *p, *getarg(); + char *p; struct stat statb; setuid(getuid()); @@ -120,7 +132,6 @@ printmail(argc, argv) if (argv[1][0] != '-') break; switch (argv[1][1]) { - case 'p': flgp++; /* fall thru... */ @@ -151,12 +162,12 @@ printmail(argc, argv) } flock(fileno(malf), LOCK_SH); copymt(malf, tmpf); - fclose(malf); /* implicit unlock */ + fclose(malf); /* implicit unlock */ fseek(tmpf, 0L, L_SET); changed = 0; print = 1; - for (i = 0; i < nlet; ) { + for (i = 0; i < nlet;) { j = forward ? i : nlet - i - 1; if (setjmp(sjbuf)) { print = 0; @@ -175,7 +186,6 @@ printmail(argc, argv) if (fgets(resp, LSIZE, stdin) == NULL) break; switch (resp[0]) { - default: printf("usage\n"); case '?': @@ -221,19 +231,18 @@ printmail(argc, argv) if (resp[1] == '\n' || resp[1] == '\0') { p = getenv("HOME"); if (p != 0) - cat(resp+1, p, "/mbox"); + cat(resp + 1, p, "/mbox"); else - cat(resp+1, "", "mbox"); + cat(resp + 1, "", "mbox"); } - for (p = resp+1; (p = getarg(lfil, p)) != NULL; ) { + for (p = resp + 1; (p = getarg(lfil, p)) != NULL;) { malf = fopen(lfil, "a"); if (malf == NULL) { - printf("mail: %s: cannot append\n", - lfil); + printf("mail: %s: cannot append\n", lfil); flg++; continue; } - copylet(j, malf, resp[0]=='w'? ZAP: ORDINARY); + copylet(j, malf, resp[0] == 'w' ? ZAP : ORDINARY); fclose(malf); } if (flg) @@ -256,7 +265,7 @@ printmail(argc, argv) print = 0; continue; } - for (p = resp+1; (p = getarg(lfil, p)) != NULL; ) + for (p = resp + 1; (p = getarg(lfil, p)) != NULL;) if (!sendmail(j, lfil, my_name)) flg++; if (flg) @@ -268,7 +277,7 @@ printmail(argc, argv) } break; case '!': - system(resp+1); + system(resp + 1); printf("!\n"); print = 0; break; @@ -281,15 +290,15 @@ printmail(argc, argv) break; } } - donep: +donep: if (changed) copyback(); } /* copy temp or whatever back to /var/mail */ -copyback() +void copyback() { - register int i, c; + int i, c; sigset_t set; int fd, new = 0; struct stat stbuf; @@ -307,7 +316,7 @@ copyback() if (fd < 0 || malf == NULL) panic("can't rewrite %s", lfil); fstat(fd, &stbuf); - if (stbuf.st_size != let[nlet].adr) { /* new mail has arrived */ + if (stbuf.st_size != let[nlet].adr) { /* new mail has arrived */ fseek(malf, let[nlet].adr, L_SET); fseek(tmpf, let[nlet].adr, L_SET); while ((c = getc(malf)) != EOF) @@ -320,15 +329,14 @@ copyback() for (i = 0; i < nlet; i++) if (let[i].change != 'd') copylet(i, malf, ORDINARY); - fclose(malf); /* implict unlock */ + fclose(malf); /* implict unlock */ if (new) printf("New mail has arrived.\n"); (void)sigprocmask(SIG_UNBLOCK, &set, NULL); } /* copy mail (f1) to temp (f2) */ -copymt(f1, f2) - FILE *f1, *f2; +void copymt(FILE *f1, FILE *f2) { long nextadr; @@ -340,25 +348,23 @@ copymt(f1, f2) nextadr += strlen(line); fputs(line, f2); } - let[nlet].adr = nextadr; /* last plus 1 */ + let[nlet].adr = nextadr; /* last plus 1 */ } -copylet(n, f, type) - FILE *f; +void copylet(int n, FILE *f, int type) { int ch; long k; char hostname[MAXHOSTNAMELEN]; fseek(tmpf, let[n].adr, L_SET); - k = let[n+1].adr - let[n].adr; + k = let[n + 1].adr - let[n].adr; while (k-- > 1 && (ch = getc(tmpf)) != '\n') if (type != ZAP) putc(ch, f); switch (type) { - case REMOTE: - gethostname(hostname, sizeof (hostname)); + gethostname(hostname, sizeof(hostname)); fprintf(f, " remote from %s\n", hostname); break; @@ -384,26 +390,24 @@ copylet(n, f, type) putc(getc(tmpf), f); } -isfrom(lp) -register char *lp; +int isfrom(char *lp) { - register char *p; + char *p; - for (p = from; *p; ) + for (p = from; *p;) if (*lp++ != *p++) - return(0); - return(1); + return (0); + return (1); } -bulkmail(argc, argv) -char **argv; +void bulkmail(int argc, char **argv) { char *truename; int first; - register char *cp; + char *cp; char *newargv[1000]; - register char **ap; - register char **vp; + char **ap; + char **vp; int dflag; dflag = 0; @@ -418,7 +422,7 @@ char **argv; if (!dflag) { /* give it to sendmail, rah rah! */ unlink(lettmp); - ap = newargv+1; + ap = newargv + 1; if (rmail) *ap-- = "-s"; *ap = "-sendmail"; @@ -514,56 +518,53 @@ char **argv; fclose(tmpf); } -sendrmt(n, name) -char *name; +int sendrmt(int n, char *name) { FILE *rmf, *popen(); - register char *p; + char *p; char rsys[64], cmd[64]; - register pid; + int pid; int sts; - for (p=rsys; *name!='!'; *p++ = *name++) - if (*name=='\0') - return(0); /* local address, no '!' */ + for (p = rsys; *name != '!'; *p++ = *name++) + if (*name == '\0') + return (0); /* local address, no '!' */ *p = '\0'; - if (name[1]=='\0') { + if (name[1] == '\0') { printf("null name\n"); - return(0); + return (0); } skip: if ((pid = fork()) == -1) { fprintf(stderr, "mail: can't create proc for remote\n"); - return(0); + return (0); } if (pid) { while (wait(&sts) != pid) { - if (wait(&sts)==-1) - return(0); + if (wait(&sts) == -1) + return (0); } - return(!sts); + return (!sts); } setuid(getuid()); - if (any('!', name+1)) - (void)sprintf(cmd, "uux - %s!rmail \\(%s\\)", rsys, name+1); + if (any('!', name + 1)) + (void)sprintf(cmd, "uux - %s!rmail \\(%s\\)", rsys, name + 1); else - (void)sprintf(cmd, "uux - %s!rmail %s", rsys, name+1); - if ((rmf=popen(cmd, "w")) == NULL) + (void)sprintf(cmd, "uux - %s!rmail %s", rsys, name + 1); + if ((rmf = popen(cmd, "w")) == NULL) exit(1); copylet(n, rmf, REMOTE); exit(pclose(rmf) != 0); } -usage() +void usage() { fprintf(stderr, "Usage: mail [ -f ] people . . .\n"); error = EX_USAGE; done(); } -sendmail(n, name, fromaddr) - int n; - char *name, *fromaddr; +int sendmail(int n, char *name, char *fromaddr) { char file[256]; int fd; @@ -571,30 +572,30 @@ sendmail(n, name, fromaddr) char buf[128]; off_t oldsize; - if (*name=='!') + if (*name == '!') name++; if (any('!', name)) return (sendrmt(n, name)); if ((pw = getpwnam(name)) == NULL) { printf("mail: can't send to %s\n", name); - return(0); + return (0); } cat(file, maildir, name); if (!safefile(file)) - return(0); + return (0); fd = open(file, O_WRONLY | O_CREAT | O_EXLOCK, MAILMODE); if (fd >= 0) malf = fdopen(fd, "a"); if (fd < 0 || malf == NULL) { close(fd); printf("mail: %s: cannot append\n", file); - return(0); + return (0); } fchown(fd, pw->pw_uid, pw->pw_gid); oldsize = ftell(malf); (void)sprintf(buf, "%s@%ld\n", name, oldsize); - copylet(n, malf, ORDINARY); /* Try to deliver the message */ + copylet(n, malf, ORDINARY); /* Try to deliver the message */ /* If there is any error during the delivery of the message, * the mail file may be corrupted (incomplete last line) and @@ -610,13 +611,13 @@ sendmail(n, name, fromaddr) printf("mail: %s: cannot append\n", file); ftruncate(fd, oldsize); fclose(malf); - return(0); + return (0); } fclose(malf); - return(1); + return (1); } -delex(i) +void delex(int i) { sigset_t sigt; @@ -634,60 +635,56 @@ delex(i) done(); } -done() +void done() { unlink(lettmp); exit(error); } -cat(to, from1, from2) - char *to, *from1, *from2; +void cat(char *to, char *from1, char *from2) { - register char *cp, *dp; + char *cp, *dp; cp = to; - for (dp = from1; *cp = *dp++; cp++) + for (dp = from1; (*cp = *dp++); cp++) ; - for (dp = from2; *cp++ = *dp++; ) + for (dp = from2; (*cp++ = *dp++);) ; } /* copy p... into s, update p */ -char * -getarg(s, p) - register char *s, *p; +char *getarg(char *s, char *p) { while (*p == ' ' || *p == '\t') p++; if (*p == '\n' || *p == '\0') - return(NULL); + return (NULL); while (*p != ' ' && *p != '\t' && *p != '\n' && *p != '\0') *s++ = *p++; *s = '\0'; - return(p); + return (p); } -safefile(f) - char *f; +int safefile(char *f) { struct stat statb; if (lstat(f, &statb) < 0) return (1); if (statb.st_nlink != 1 || (statb.st_mode & S_IFMT) == S_IFLNK) { - fprintf(stderr, - "mail: %s has more than one link or is a symbolic link\n", - f); + fprintf(stderr, "mail: %s has more than one link or is a symbolic link\n", f); return (0); } return (1); } -panic(msg, a1, a2, a3) - char *msg; +void panic(char *msg, ...) { + va_list args; + va_start(args, msg); fprintf(stderr, "mail: "); - fprintf(stderr, msg, a1, a2, a3); + vfprintf(stderr, msg, args); fprintf(stderr, "\n"); + va_end(args); done(); } diff --git a/src/cmd/ps.c b/src/cmd/ps.c index ada4184..59bde3f 100644 --- a/src/cmd/ps.c +++ b/src/cmd/ps.c @@ -133,11 +133,9 @@ struct psout *outargs; /* info for first npr processes */ * know that r(hp|up|mt) are unlikely as are different mem's, * floppy, null, tty, etc. */ -void -maybetty(cp) - register char *cp; +void maybetty(char *cp) { - register struct ttys *dp; + struct ttys *dp; struct stat stb; /* Allow only terminal devices. */ @@ -167,11 +165,10 @@ maybetty(cp) dp->ttyd = -1; } -void -getdev() +void getdev() { - register DIR *df; - register struct direct *dbuf; + DIR *df; + struct direct *dbuf; if (chdir("/dev") < 0) { perror("/dev"); @@ -186,11 +183,10 @@ getdev() closedir(df); } -char * -gettty() +char *gettty() { - register int tty_step; - register char *p; + int tty_step; + char *p; if (u.u_ttyp) { for (tty_step = 0; tty_step < nttys; ++tty_step) { @@ -205,9 +201,7 @@ gettty() return("?"); } -unsigned -getptr(adr) - off_t adr; +unsigned getptr(off_t adr) { unsigned ptr = 0; @@ -217,21 +211,16 @@ getptr(adr) return ptr; } -int -getbyte(adr) - register char *adr; +int getbyte(off_t adr) { char b; - if (lseek(file, (off_t) adr, 0) == (off_t) -1 || read (file, &b, 1) < 1) + if (lseek(file, adr, 0) == (off_t) -1 || read (file, &b, 1) < 1) return(0); return((unsigned) b); } -int -getcmd(a, addr) - off_t addr; - register struct psout *a; +int getcmd(struct psout *a, off_t addr) { /* amount of top of stack to examine for args */ #define ARGLIST (DEV_BSIZE * 2) @@ -337,16 +326,14 @@ getcmd(a, addr) * Save command data to outargs[]. * Return 1 on success. */ -int -savcom(puid) - int puid; +int savcom(int puid) { char *tp; off_t addr; off_t daddr, saddr; - register struct psout *a; - register struct proc *procp = mproc; - register struct user *up = &u; + struct psout *a; + struct proc *procp = mproc; + struct user *up = &u; long txtsiz, datsiz, stksiz; if (procp->p_flag & SLOAD) { @@ -409,11 +396,11 @@ savcom(puid) return getcmd(a, saddr); } -int -pscomp(x1, x2) - register struct psout *x1, *x2; +int pscomp(const void *a1, const void *a2) { - register int c; + const struct psout *x1 = a1; + const struct psout *x2 = a2; + int c; c = (x1)->o_ttyd - (x2)->o_ttyd; if (c == 0) @@ -424,12 +411,10 @@ pscomp(x1, x2) /* * fixup figures out everybodys name and sorts into a nice order. */ -void -fixup(np) - register int np; +void fixup(int np) { - register int i; - register struct passwd *pw; + int i; + struct passwd *pw; if (uflg) { setpwent(); @@ -451,10 +436,11 @@ fixup(np) qsort(outargs, np, sizeof (outargs[0]), pscomp); } -int -wchancomp(x1, x2) - register WCHAN *x1, *x2; +int wchancomp(const void *a1, const void *a2) { + const WCHAN *x1 = a1; + const WCHAN *x2 = a2; + if (x1->caddr > x2->caddr) return(1); else if (x1->caddr == x2->caddr) @@ -463,13 +449,10 @@ wchancomp(x1, x2) return(-1); } -void -addchan(name, caddr) - char *name; - unsigned caddr; +void addchan(char *name, unsigned caddr) { static int left = 0; - register WCHAN *wp; + WCHAN *wp; if (left == 0) { if (wchand) { @@ -493,17 +476,15 @@ addchan(name, caddr) wp->caddr = caddr; } -char * -getchan(chan) - register unsigned int chan; +char *getchan(caddr_t chan) { - register int i; - register char *prevsym; + int i; + char *prevsym; prevsym = ""; if (chan) { for (i = 0; i < nchans; i++) { - if (wchand[i].caddr > chan) + if (wchand[i].caddr > (unsigned) chan) return (prevsym); prevsym = wchand[i].cname; } @@ -511,17 +492,13 @@ getchan(chan) return(prevsym); } -void -perrexit(msg) - char *msg; +void perrexit(char *msg) { perror(msg); exit(1); } -void -openfiles(argc, argv) - char **argv; +void openfiles(int argc, char **argv) { if (kflg) kmemf = argc > 1 ? argv[1] : _PATH_CORE; @@ -541,10 +518,7 @@ openfiles(argc, argv) perrexit(swapf); } -void -getkvars(argc,argv) - int argc; - char **argv; +void getkvars(int argc, char **argv) { knlist(nl); if (! nflg) { @@ -581,9 +555,7 @@ getkvars(argc,argv) read(kmem, (char *)&hz, sizeof(hz)); } -void -ptime(a) - struct psout *a; +void ptime(struct psout *a) { time_t tm; @@ -595,9 +567,7 @@ ptime(a) char *uhdr = "USER PID NICE SZ TTY TIME"; -void -upr(a) - register struct psout *a; +void upr(struct psout *a) { printf("%-8.8s%6u%4d%4d %-3.3s",a->o_uname,a->o_pid,a->o_nice,a->o_size,a->o_tty); ptime(a); @@ -605,9 +575,7 @@ upr(a) char *shdr = " PID TTY TIME"; -void -spr (a) - register struct psout *a; +void spr(struct psout *a) { printf("%6u %-3.3s",a->o_pid,a->o_tty); ptime(a); @@ -615,9 +583,7 @@ spr (a) char *lhdr = " F S UID PID PPID CPU PRI NICE ADDR SZ WCHAN TTY TIME"; -void -lpr(a) - register struct psout *a; +void lpr(struct psout *a) { static char clist[] = "0SWRIZT"; @@ -636,10 +602,9 @@ lpr(a) ptime(a); } -void -printhdr() +void printhdr() { - register char *hdr, *cmdstr = " COMMAND"; + char *hdr, *cmdstr = " COMMAND"; if (rflg) return; @@ -656,14 +621,12 @@ printhdr() fflush(stdout); } -int -main (argc, argv) - char **argv; +int main(int argc, char **argv) { int uid, euid, puid, nread; - register int i, j; + int i, j; char *ap; - register struct proc *procp; + struct proc *procp; if ((ioctl(fileno(stdout), TIOCGWINSZ, &ws) != -1 && ioctl(fileno(stderr), TIOCGWINSZ, &ws) != -1 && @@ -803,8 +766,8 @@ main (argc, argv) } fixup(npr); for (i = 0; i < npr; i++) { - register int cmdwidth = twidth - cmdstart - 2; - register struct psout *a = &outargs[i]; + int cmdwidth = twidth - cmdstart - 2; + struct psout *a = &outargs[i]; if (rflg) { if (write(1, (char *) a, sizeof (*a)) != sizeof (*a)) diff --git a/src/cmd/su.c b/src/cmd/su.c index 5041ef6..5ec9671 100644 --- a/src/cmd/su.c +++ b/src/cmd/su.c @@ -3,41 +3,39 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ -#include -#include -#include -#include -#include -#include -#include #include #include #include #include +#include +#include +#include +#include +#include +#include +#include -char userbuf[64] = "USER="; -char homebuf[128] = "HOME="; -char shellbuf[128] = "SHELL="; -char pathbuf[128] = "PATH=" _PATH_STDPATH; -char *cleanenv[] = { userbuf, homebuf, shellbuf, pathbuf, 0, 0 }; -char *user = "root"; -char *shell = _PATH_BSHELL; +char userbuf[64] = "USER="; +char homebuf[128] = "HOME="; +char shellbuf[128] = "SHELL="; +char pathbuf[128] = "PATH=" _PATH_STDPATH; +char *cleanenv[] = { userbuf, homebuf, shellbuf, pathbuf, 0, 0 }; +char *user = "root"; +char *shell = _PATH_BSHELL; int fulllogin; int fastlogin; -extern char **environ; -struct passwd *pwd; +struct passwd *pwd; -setenvv(ename, eval, buf) - char *ename, *eval, *buf; +void setenvv(char *ename, char *eval, char *buf) { - register char *cp, *dp; - register char **ep = environ; + char *cp, *dp; + char **ep = environ; /* * this assumes an environment variable "ename" already exists */ - while (dp = *ep++) { + while ((dp = *ep++)) { for (cp = ename; *cp == *dp && *cp; cp++, dp++) continue; if (*cp == 0 && (*dp == '=' || *dp == 0)) { @@ -48,14 +46,12 @@ setenvv(ename, eval, buf) } } -char * -getenvv(ename) - char *ename; +char *getenvv(char *ename) { - register char *cp, *dp; - register char **ep = environ; + char *cp, *dp; + char **ep = environ; - while (dp = *ep++) { + while ((dp = *ep++)) { for (cp = ename; *cp == *dp && *cp; cp++, dp++) continue; if (*cp == 0 && (*dp == '=' || *dp == 0)) @@ -64,14 +60,12 @@ getenvv(ename) return ((char *)0); } -main(argc,argv) - int argc; - char *argv[]; +int main(int argc, char *argv[]) { char *password; char buf[1000]; FILE *fp; - register char *p; + char *p; openlog("su", LOG_ODELAY, LOG_AUTH); @@ -103,30 +97,28 @@ again: * Only allow those in group zero to su to root. */ if (pwd->pw_uid == 0) { - struct group *gr; + struct group *gr; int i; if ((gr = getgrgid(0)) != NULL) { for (i = 0; gr->gr_mem[i] != NULL; i++) if (strcmp(buf, gr->gr_mem[i]) == 0) goto userok; - fprintf(stderr, "You do not have permission to su %s\n", - user); + fprintf(stderr, "You do not have permission to su %s\n", user); exit(1); } userok: setpriority(PRIO_PROCESS, 0, -2); } -#define Getlogin() (((p = getlogin()) && *p) ? p : buf) +#define Getlogin() (((p = getlogin()) && *p) ? p : buf) if (pwd->pw_passwd[0] == '\0' || getuid() == 0) goto ok; password = getpass("Password:"); if (strcmp(pwd->pw_passwd, crypt(password, pwd->pw_passwd)) != 0) { fprintf(stderr, "Sorry\n"); if (pwd->pw_uid == 0) { - syslog(LOG_CRIT, "BAD SU %s on %s", - Getlogin(), ttyname(2)); + syslog(LOG_CRIT, "BAD SU %s on %s", Getlogin(), ttyname(2)); } exit(2); } diff --git a/src/cmd/vmstat.c b/src/cmd/vmstat.c index 1f88c9d..c3d3221 100644 --- a/src/cmd/vmstat.c +++ b/src/cmd/vmstat.c @@ -3,93 +3,98 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ +#include +#include #include #include #include -#include -#include - -#include -#include -#include -#include -#include +#include +#include +#include +#include #include -#include +#include +#include #include - -#include +#include struct nlist nl[] = { -#define X_CPTIME 0 +#define X_CPTIME 0 { "_cp_time" }, -#define X_RATE 1 +#define X_RATE 1 { "_rate" }, -#define X_TOTAL 2 +#define X_TOTAL 2 { "_total" }, -#define X_FORKSTAT 3 +#define X_FORKSTAT 3 { "_forkstat" }, -#define X_SUM 4 +#define X_SUM 4 { "_sum" }, -#define X_BOOTTIME 5 +#define X_BOOTTIME 5 { "_boottime" }, -#define X_DKXFER 6 +#define X_DKXFER 6 { "_dk_xfer" }, -#define X_HZ 7 +#define X_HZ 7 { "_hz" }, -#define X_NCHSTATS 8 +#define X_NCHSTATS 8 { "_nchstats" }, #define X_DK_NDRIVE 9 { "_dk_ndrive" }, -#define X_DK_NAME 10 +#define X_DK_NAME 10 { "_dk_name" }, -#define X_DK_UNIT 11 +#define X_DK_UNIT 11 { "_dk_unit" }, -#define X_FREEMEM 12 +#define X_FREEMEM 12 { "_freemem" }, { "" }, }; -char **dk_name; +char **dk_name; int *dk_unit; -size_t pfree; +size_t pfree; int pflag; -char **dr_name; +char **dr_name; int *dr_select; int dk_ndrive; int ndrives = 0; -char *defdrives[] = { "sd0", 0 }; -double stat1(); +char *defdrives[] = { "sd0", 0 }; +double stat1(); int hz; struct { int busy; - long time[CPUSTATES]; - long *xfer; + long time[CPUSTATES]; + long *xfer; - struct vmrate Rate; - struct vmtotal Total; - struct vmsum Sum; + struct vmrate Rate; + struct vmtotal Total; + struct vmsum Sum; - struct forkstat Forkstat; + struct forkstat Forkstat; unsigned rectime; unsigned pgintime; } s, s1, z; -#define rate s.Rate -#define total s.Total -#define sum s.Sum -#define forkstat s.Forkstat -struct vmsum osum; -double etime; -int mf; -time_t now, boottime; +#define rate s.Rate +#define total s.Total +#define sum s.Sum +#define forkstat s.Forkstat + +struct vmsum osum; +double etime; +int mf; +time_t now, boottime; int lines = 1; -void printhdr(sig) - int sig; +static void dotimes(void); +static void doforkst(void); +static void dosum(void); +static void read_names(void); +static void dointr(long nintv); +static void stats(int dn); + +void printhdr(int sig) { - register int i, j; + int i, j; if (pflag) printf("-procs- -----memory----- -swap- "); @@ -108,8 +113,7 @@ void printhdr(sig) for (i = 0; i < dk_ndrive; i++) if (dr_select[i]) - printf("%c%c%c ", - dr_name[i][0], dr_name[i][1], dr_name[i][2]); + printf("%c%c%c ", dr_name[i][0], dr_name[i][1], dr_name[i][2]); printf(" in sy"); if (pflag) printf(" tr"); @@ -120,65 +124,61 @@ void printhdr(sig) lines = 19; } -main(argc, argv) - int argc; - char **argv; +int main(int argc, char **argv) { - extern char *ctime(); - register i; + int i; int iter, iflag = 0; long nintv, t; char *arg, **cp, buf[BUFSIZ]; knlist(nl); - if(nl[0].n_value == 0) { + if (nl[0].n_value == 0) { fprintf(stderr, "no /vmunix namelist\n"); exit(1); } mf = open("/dev/kmem", 0); - if(mf < 0) { + if (mf < 0) { fprintf(stderr, "cannot open /dev/kmem\n"); exit(1); } iter = 0; argc--, argv++; - while (argc>0 && argv[0][0]=='-') { + while (argc > 0 && argv[0][0] == '-') { char *cp = *argv++; argc--; - while (*++cp) switch (*cp) { + while (*++cp) + switch (*cp) { + case 't': + dotimes(); + exit(0); - case 't': - dotimes(); - exit(0); + case 'z': + close(mf); + mf = open("/dev/kmem", 2); + lseek(mf, (long)nl[X_SUM].n_value, L_SET); + write(mf, &z.Sum, sizeof z.Sum); + exit(0); - case 'z': - close(mf); - mf = open("/dev/kmem", 2); - lseek(mf, (long)nl[X_SUM].n_value, L_SET); - write(mf, &z.Sum, sizeof z.Sum); - exit(0); + case 'f': + doforkst(); + exit(0); - case 'f': - doforkst(); - exit(0); + case 's': + dosum(); + exit(0); - case 's': - dosum(); - exit(0); + case 'i': + iflag++; + break; - case 'i': - iflag++; - break; + case 'p': + pflag++; + break; - case 'p': - pflag++; - break; - - default: - fprintf(stderr, - "usage: vmstat [ -fsiptz ] [ interval ] [ count]\n"); - exit(1); - } + default: + fprintf(stderr, "usage: vmstat [ -fsiptz ] [ interval ] [ count]\n"); + exit(1); + } } lseek(mf, (long)nl[X_BOOTTIME].n_value, L_SET); read(mf, &boottime, sizeof boottime); @@ -189,18 +189,18 @@ main(argc, argv) exit(1); } lseek(mf, (long)nl[X_DK_NDRIVE].n_value, L_SET); - read(mf, &dk_ndrive, sizeof (dk_ndrive)); + read(mf, &dk_ndrive, sizeof(dk_ndrive)); if (dk_ndrive <= 0) { fprintf(stderr, "dk_ndrive %d\n", dk_ndrive); exit(1); } - dr_select = (int *)calloc(dk_ndrive, sizeof (int)); - dr_name = (char **)calloc(dk_ndrive, sizeof (char *)); - dk_name = (char **)calloc(dk_ndrive, sizeof (char *)); - dk_unit = (int *)calloc(dk_ndrive, sizeof (int)); -#define allocate(e, t) \ - s./**/e = (t *)calloc(dk_ndrive, sizeof (t)); \ - s1./**/e = (t *)calloc(dk_ndrive, sizeof (t)); + dr_select = (int *)calloc(dk_ndrive, sizeof(int)); + dr_name = (char **)calloc(dk_ndrive, sizeof(char *)); + dk_name = (char **)calloc(dk_ndrive, sizeof(char *)); + dk_unit = (int *)calloc(dk_ndrive, sizeof(int)); +#define allocate(e, t) \ + s./**/ e = (t *)calloc(dk_ndrive, sizeof(t)); \ + s1./**/ e = (t *)calloc(dk_ndrive, sizeof(t)); allocate(xfer, long); for (arg = buf, i = 0; i < dk_ndrive; i++) { dr_name[i] = arg; @@ -210,9 +210,8 @@ main(argc, argv) read_names(); time(&now); nintv = now - boottime; - if (nintv <= 0 || nintv > 60L*60L*24L*365L*10L) { - fprintf(stderr, - "Time makes no sense... namelist must be wrong.\n"); + if (nintv <= 0 || nintv > 60L * 60L * 24L * 365L * 10L) { + fprintf(stderr, "Time makes no sense... namelist must be wrong.\n"); exit(1); } if (iflag) { @@ -257,11 +256,11 @@ main(argc, argv) signal(SIGCONT, printhdr); loop: if (--lines == 0) - printhdr(); + printhdr(0); lseek(mf, (long)nl[X_CPTIME].n_value, L_SET); read(mf, s.time, sizeof s.time); lseek(mf, (long)nl[X_DKXFER].n_value, L_SET); - read(mf, s.xfer, dk_ndrive * sizeof (long)); + read(mf, s.xfer, dk_ndrive * sizeof(long)); if (nintv != 1) { lseek(mf, (long)nl[X_SUM].n_value, L_SET); @@ -287,18 +286,18 @@ loop: lseek(mf, (long)nl[X_SUM].n_value, L_SET); read(mf, &sum, sizeof sum); etime = 0; - for (i=0; i < dk_ndrive; i++) { + for (i = 0; i < dk_ndrive; i++) { t = s.xfer[i]; s.xfer[i] -= s1.xfer[i]; s1.xfer[i] = t; } - for (i=0; i < CPUSTATES; i++) { + for (i = 0; i < CPUSTATES; i++) { t = s.time[i]; s.time[i] -= s1.time[i]; s1.time[i] = t; etime += s.time[i]; } - if(etime == 0.) + if (etime == 0.) etime = 1.; printf("%2d%2d%2d", total.t_rq, total.t_dw, total.t_sw); @@ -306,14 +305,13 @@ loop: * We don't use total.t_free because it slops around too much * within this kernel */ - printf("%7d", total.t_avm); + printf("%7ld", total.t_avm); if (pflag) - printf("%4d", - total.t_avm ? (total.t_avmtxt * 100) / total.t_avm : 0); + printf("%4ld", total.t_avm ? (total.t_avmtxt * 100) / total.t_avm : 0); printf("%6d", pfree); if (pflag) { - printf("%4d%3d ", rate.v_swpin / nintv, rate.v_swpout / nintv); + printf("%4ld%3ld ", rate.v_swpin / nintv, rate.v_swpout / nintv); } etime /= (float)hz; @@ -321,14 +319,14 @@ loop: if (dr_select[i]) stats(i); } - printf("%5d%4d", rate.v_intr/nintv, rate.v_syscall/nintv); + printf("%5ld%4ld", rate.v_intr / nintv, rate.v_syscall / nintv); if (pflag) - printf("%4d", rate.v_trap / nintv); - printf("%4d", rate.v_swtch / nintv); + printf("%4ld", rate.v_trap / nintv); + printf("%4ld", rate.v_swtch / nintv); - for(i=0; i 0) { + if (--iter && argc > 0) { sleep(atoi(argv[0])); goto loop; } } -dotimes() +void dotimes() { printf("page in/out/reclamation is not applicable to 2.11BSD\n"); } -dosum() +void dosum() { struct nchstats nchstats; long nchtotal; lseek(mf, (long)nl[X_SUM].n_value, L_SET); read(mf, &sum, sizeof sum); - printf("%9d swap ins\n", sum.v_swpin); - printf("%9d swap outs\n", sum.v_swpout); - printf("%9d kbytes swapped in\n", sum.v_kbin); - printf("%9d kbytes swapped out\n", sum.v_kbout); - printf("%9d cpu context switches\n", sum.v_swtch); - printf("%9d device interrupts\n", sum.v_intr); - printf("%9d software interrupts\n", sum.v_soft); - printf("%9d traps\n", sum.v_trap); - printf("%9d system calls\n", sum.v_syscall); -#define nz(x) ((x) ? (x) : 1) + printf("%9ld swap ins\n", sum.v_swpin); + printf("%9ld swap outs\n", sum.v_swpout); + printf("%9ld kbytes swapped in\n", sum.v_kbin); + printf("%9ld kbytes swapped out\n", sum.v_kbout); + printf("%9ld cpu context switches\n", sum.v_swtch); + printf("%9ld device interrupts\n", sum.v_intr); + printf("%9ld software interrupts\n", sum.v_soft); + printf("%9ld traps\n", sum.v_trap); + printf("%9ld system calls\n", sum.v_syscall); +#define nz(x) ((x) ? (x) : 1) lseek(mf, (long)nl[X_NCHSTATS].n_value, 0); read(mf, &nchstats, sizeof nchstats); - nchtotal = nchstats.ncs_goodhits + nchstats.ncs_badhits + - nchstats.ncs_falsehits + nchstats.ncs_miss + nchstats.ncs_long; - printf("%9d total name lookups", nchtotal); - printf(" (cache hits %d%% system %d%% per-process)\n", - nchstats.ncs_goodhits * 100 / nz(nchtotal), - nchstats.ncs_pass2 * 100 / nz(nchtotal)); - printf("%9s badhits %d, falsehits %d, toolong %d\n", "", - nchstats.ncs_badhits, nchstats.ncs_falsehits, nchstats.ncs_long); + nchtotal = nchstats.ncs_goodhits + nchstats.ncs_badhits + nchstats.ncs_falsehits + + nchstats.ncs_miss + nchstats.ncs_long; + printf("%9ld total name lookups", nchtotal); + printf(" (cache hits %ld%% system %ld%% per-process)\n", + nchstats.ncs_goodhits * 100 / nz(nchtotal), nchstats.ncs_pass2 * 100 / nz(nchtotal)); + printf("%9s badhits %ld, falsehits %ld, toolong %ld\n", "", nchstats.ncs_badhits, + nchstats.ncs_falsehits, nchstats.ncs_long); } -doforkst() +void doforkst() { lseek(mf, (long)nl[X_FORKSTAT].n_value, L_SET); read(mf, &forkstat, sizeof forkstat); if (forkstat.cntfork != 0) - printf("%d forks, %d kbytes, average=%.2f\n", - forkstat.cntfork, forkstat.sizfork, - (float) forkstat.sizfork / forkstat.cntfork); + printf("%ld forks, %ld kbytes, average=%.2f\n", forkstat.cntfork, forkstat.sizfork, + (float)forkstat.sizfork / forkstat.cntfork); if (forkstat.cntvfork != 0) - printf("%d vforks, %d kbytes, average=%.2f\n", - forkstat.cntvfork, forkstat.sizvfork, - (float) forkstat.sizvfork / forkstat.cntvfork); + printf("%ld vforks, %ld kbytes, average=%.2f\n", forkstat.cntvfork, forkstat.sizvfork, + (float)forkstat.sizvfork / forkstat.cntvfork); } -stats(dn) +void stats(int dn) { if (dn >= dk_ndrive) { printf(" 0"); return; } - printf("%4.0f", s.xfer[dn]/etime); + printf("%4.0f", s.xfer[dn] / etime); } -double -stat1(row) +double stat1(row) { double t; - register i; + int i; t = 0; - for(i=0; i +#include +#include +#include #include #include #include -#include -#include -#include -#include -#include -#include -#include #include +#include +#include +#include -#define IGNOREUSER "sleeper" +#define IGNOREUSER "sleeper" -char hostname[32]; -char mesg[3000]; -int msize,sline; -struct utmp *utmp; -char who[UT_NAMESIZE + 1] = "???"; -long clock; +char hostname[32]; +char mesg[3000]; +int msize, sline; +struct utmp *utmp; +char who[UT_NAMESIZE + 1] = "???"; +long clock; struct tm *localclock; -extern errno; +static void sendmes(char *tty); -main(argc, argv) -char *argv[]; +int main(int argc, char *argv[]) { - register int i, c; - register struct utmp *p; + int i, c; + struct utmp *p; int f; struct stat statb; - (void) gethostname(hostname, sizeof (hostname)); + (void)gethostname(hostname, sizeof(hostname)); if ((f = open(_PATH_UTMP, O_RDONLY, 0)) < 0) { fprintf(stderr, "Cannot open %s\n", _PATH_UTMP); exit(1); } - clock = time( 0 ); - localclock = localtime( &clock ); - sline = ttyslot(); /* 'utmp' slot no. of sender */ - (void) fstat(f, &statb); + clock = time(0); + localclock = localtime(&clock); + sline = ttyslot(); /* 'utmp' slot no. of sender */ + (void)fstat(f, &statb); utmp = (struct utmp *)malloc((unsigned)statb.st_size); c = read(f, (char *)utmp, (int)statb.st_size); - (void) close(f); + (void)close(f); c /= sizeof(struct utmp); if (sline) strncpy(who, utmp[sline].ut_name, sizeof(utmp[sline].ut_name)); - sprintf(mesg, - "\n\007\007Broadcast Message from %s@%s (%.*s) at %d:%02d ...\r\n\n" - , who - , hostname - , sizeof(utmp[sline].ut_line) - , utmp[sline].ut_line - , localclock -> tm_hour - , localclock -> tm_min - ); + sprintf(mesg, "\n\007\007Broadcast Message from %s@%s (%.*s) at %d:%02d ...\r\n\n", who, + hostname, sizeof(utmp[sline].ut_line), utmp[sline].ut_line, localclock->tm_hour, + localclock->tm_min); msize = strlen(mesg); if (argc >= 2) { /* take message from unix file instead of standard input */ @@ -82,26 +75,24 @@ char *argv[]; mesg[msize++] = i; } fclose(stdin); - for (i=0; iut_name[0] == 0 || - strncmp(p->ut_name, IGNOREUSER, sizeof(p->ut_name)) == 0) + if (p->ut_name[0] == 0 || strncmp(p->ut_name, IGNOREUSER, sizeof(p->ut_name)) == 0) continue; sendmes(p->ut_line); } exit(0); } -sendmes(tty) -char *tty; +void sendmes(char *tty) { - register f, flags; + int f, flags; static char t[50] = "/dev/"; int e, i; strcpy(t + 5, tty); - if ((f = open(t, O_WRONLY|O_NDELAY)) < 0) { + if ((f = open(t, O_WRONLY | O_NDELAY)) < 0) { if (errno != EWOULDBLOCK) perror(t); return; @@ -114,15 +105,15 @@ char *tty; goto oldway; i = write(f, mesg, msize); e = errno; - (void) fcntl(f, F_SETFL, flags); + (void)fcntl(f, F_SETFL, flags); if (i == msize) { - (void) close(f); + (void)close(f); return; } if (e != EWOULDBLOCK) { errno = e; perror(t); - (void) close(f); + (void)close(f); return; } oldway: @@ -132,10 +123,10 @@ oldway: return; } if (i) { - (void) close(f); + (void)close(f); return; } - (void) write(f, mesg, msize); + (void)write(f, mesg, msize); exit(0); } diff --git a/src/cmd/write.c b/src/cmd/write.c index 7dc9fd5..e91b198 100644 --- a/src/cmd/write.c +++ b/src/cmd/write.c @@ -1,59 +1,87 @@ /* * write to another user */ -#include #include -#include -#include -#include -#include -#include #include -#include -#include +#include +#include +#include #include +#include +#include +#include #include +#include +#include -#define NMAX sizeof(ubuf.ut_name) -#define LMAX sizeof(ubuf.ut_line) +#define NMAX sizeof(ubuf.ut_name) +#define LMAX sizeof(ubuf.ut_line) -struct utmp ubuf; -int signum[] = {SIGHUP, SIGINT, SIGQUIT, 0}; -char me[NMAX + 1] = "???"; -char *him; -char *mytty; -char histty[32]; -char ttybuf[32]; -char *histtya; +struct utmp ubuf; +int signum[] = { SIGHUP, SIGINT, SIGQUIT, 0 }; +char me[NMAX + 1] = "???"; +char *him; +char *mytty; +char histty[32]; +char ttybuf[32]; +char *histtya; int logcnt; -FILE *tf; +FILE *tf; -void timout(sig) - int sig; +void timout(int sig) { fprintf(stderr, "write: Timeout opening their tty\n"); exit(1); } -void eof(sig) - int sig; +void eof(int sig) { fprintf(tf, "EOF\r\n"); exit(0); } -main(argc, argv) - int argc; - char *argv[]; +void sigs(sig_t sig) +{ + int i; + + for (i = 0; signum[i]; i++) + signal(signum[i], sig); +} + +void ex(char *bp) +{ + int i; + + sigs(SIG_IGN); + i = fork(); + if (i < 0) { + printf("Try again\n"); + goto out; + } + if (i == 0) { + fclose(tf); /* Close his terminal */ + setgid(getgid()); /* Give up effective group privs */ + sigs((sig_t)0); + execl(getenv("SHELL") ? getenv("SHELL") : "/bin/sh", "sh", "-c", bp + 1, 0); + exit(0); + } + while (wait((int *)NULL) != i) + ; + printf("!\n"); +out: + sigs(eof); +} + +int main(int argc, char *argv[]) { struct stat stbuf; - register i; - register FILE *uf; + int i; + FILE *uf; int c1, c2; time_t clock = time(0); int suser = getuid() == 0; int nomesg = 0; - struct tm *localclock = localtime( &clock ); + struct tm *localclock = localtime(&clock); if (argc < 2) { fprintf(stderr, "Usage: write user [ttyname]\n"); @@ -77,9 +105,8 @@ main(argc, argv) perror("write: Can't stat your tty"); exit(1); } - if ((stbuf.st_mode&020) == 0) { - fprintf(stderr, - "write: You have write permission turned off\n"); + if ((stbuf.st_mode & 020) == 0) { + fprintf(stderr, "write: You have write permission turned off\n"); if (!suser) exit(1); } @@ -91,8 +118,8 @@ main(argc, argv) while (fread((char *)&ubuf, sizeof(ubuf), 1, uf) == 1) { if (ubuf.ut_name[0] == '\0') continue; - if (strcmp(ubuf.ut_line, mytty)==0) { - for (i=0; i 1) { - fprintf(stderr, - "write: %s logged in more than once ... writing to %s\n", - him, histty+5); + if (histtya == 0 && logcnt > 1) { + fprintf(stderr, "write: %s logged in more than once ... writing to %s\n", him, histty + 5); } cont: if (access(histty, 0) < 0) { @@ -156,19 +177,20 @@ cont: } alarm(0); sigs(eof); - { char hostname[32]; - gethostname(hostname, sizeof (hostname)); - fprintf(tf, - "\r\nMessage from %s@%s on %s at %d:%02d ...\r\n\007\007\007", - me, hostname, mytty, localclock->tm_hour, localclock->tm_min); - fflush(tf); + { + char hostname[32]; + gethostname(hostname, sizeof(hostname)); + fprintf(tf, "\r\nMessage from %s@%s on %s at %d:%02d ...\r\n\007\007\007", me, hostname, + mytty, localclock->tm_hour, localclock->tm_min); + fflush(tf); } for (;;) { char buf[BUFSIZ]; - register char *bp; + char *bp; + i = read(0, buf, sizeof buf); if (i <= 0) - eof(); + eof(0); if (buf[0] == '!') { buf[i] = 0; ex(buf); @@ -184,8 +206,7 @@ cont: *bp = toascii(*bp); } - if (isprint(*bp) || - *bp == ' ' || *bp == '\t' || *bp == '\n') { + if (isprint(*bp) || *bp == ' ' || *bp == '\t' || *bp == '\n') { putc(*bp, tf); } else { putc('^', tf); @@ -196,45 +217,9 @@ cont: fflush(tf); if (ferror(tf) || feof(tf)) { - printf("\n\007Write failed (%s logged out?)\n", - him); + printf("\n\007Write failed (%s logged out?)\n", him); exit(1); } } } } - -ex(bp) - char *bp; -{ - register i; - - sigs(SIG_IGN); - i = fork(); - if (i < 0) { - printf("Try again\n"); - goto out; - } - if (i == 0) { - fclose(tf); /* Close his terminal */ - setgid(getgid()); /* Give up effective group privs */ - sigs((sig_t) 0); - execl(getenv("SHELL") ? - getenv("SHELL") : "/bin/sh", "sh", "-c", bp+1, 0); - exit(0); - } - while (wait((int *)NULL) != i) - ; - printf("!\n"); -out: - sigs(eof); -} - -sigs(sig) - sig_t sig; -{ - register i; - - for (i=0; signum[i]; i++) - signal(signum[i], sig); -}