diff --git a/Makefile b/Makefile index 2bb244d..bd0c38c 100644 --- a/Makefile +++ b/Makefile @@ -88,10 +88,14 @@ OBJ = $(SRC:.c=.o) $(LIB) BIN = $(SRC:.c=) MAN = $(SRC:.c=.1) -all: $(BIN) +all: binlib + +binlib: util.a + $(MAKE) bin + +bin: $(BIN) $(OBJ): util.h config.mk -$(BIN): util.a cat.o fold.o grep.o nl.o sort.o tail.o uniq.o: text.h cp.o mv.o rm.o: fs.h diff --git a/env.c b/env.c index 718b13e..ca497e9 100644 --- a/env.c +++ b/env.c @@ -14,7 +14,8 @@ main(int argc, char **argv) { ARGBEGIN { case 'i': - clearenv(); + if(environ) + *environ = NULL; break; case 'u': unsetenv(EARGF(usage())); diff --git a/who.c b/who.c index 08c3c2b..97f2ec3 100644 --- a/who.c +++ b/who.c @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include "util.h" static void usage(void); @@ -11,21 +11,26 @@ static void usage(void); int main(int argc, char **argv) { - struct utmpx *ut; + struct utmp usr; + FILE *ufp; + time_t t; char timebuf[sizeof "yyyy-mm-dd hh:mm"]; if(argc!=1) usage(); - while((ut=getutxent())) { - if(ut->ut_type != USER_PROCESS) - continue; - t = ut->ut_tv.tv_sec; - strftime(timebuf, sizeof timebuf, "%Y-%m-%d %H:%M", localtime(&t)); - printf("%-8s %-12s %-16s\n", ut->ut_user, ut->ut_line, timebuf); + if (!(ufp = fopen(_PATH_UTMP, "r"))) { + eprintf("fopen:"); + } + while(fread((char *)&usr, sizeof(usr), 1, ufp) == 1) { + if (*usr.ut_name && *usr.ut_line) { + t = usr.ut_time; + strftime(timebuf, sizeof timebuf, "%Y-%m-%d %H:%M", localtime(&t)); + printf("%-8s %-12s %-16s\n", usr.ut_name, usr.ut_line, timebuf); + } } - endutxent(); + fclose(ufp); return 0; }