sbase

suckless unix tools
git clone git://git.2f30.org/sbase
Log | Files | Refs | README | LICENSE

commit 0fcb939408ceeeae238e596c6f4ef06193b36949
parent cd1526715f7328a5968bb77a525133a046bc2d09
Author: David Galos <galosd83@students.rowan.edu>
Date:   Thu, 18 Jul 2013 15:28:08 -0400

Compatibility with OpenBSD. Thanks, Steve Dee!

Diffstat:
MMakefile | 8++++++--
Menv.c | 3++-
Mwho.1 | 6+-----
Mwho.c | 18+++++++++++-------
4 files changed, 20 insertions(+), 15 deletions(-)

diff --git 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 @@ -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.1 b/who.1 @@ -15,10 +15,6 @@ relies on the utmp file to be updated responsibly. This doesn't always happen, which can cause who to print completely bogus data. -musl\-libc currently implements all utmpx functions as stubs Obviously, -this command cannot work under such conditions. - .SH SEE ALSO -.IR getutxent (3) -.IR utmpx (5) +.IR utmp (5) diff --git a/who.c b/who.c @@ -3,7 +3,7 @@ #include <string.h> #include <unistd.h> #include <time.h> -#include <utmpx.h> +#include <utmp.h> #include "util.h" static void usage(void); @@ -11,21 +11,25 @@ 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) + if (!(ufp = fopen(_PATH_UTMP, "r"))) { + eprintf("fopen:"); + } + while(fread((char *)&usr, sizeof(usr), 1, ufp) == 1) { + if (!*usr.ut_name || !*usr.ut_line) continue; - t = ut->ut_tv.tv_sec; + t = usr.ut_time; strftime(timebuf, sizeof timebuf, "%Y-%m-%d %H:%M", localtime(&t)); - printf("%-8s %-12s %-16s\n", ut->ut_user, ut->ut_line, timebuf); + printf("%-8s %-12s %-16s\n", usr.ut_name, usr.ut_line, timebuf); } - endutxent(); + fclose(ufp); return 0; }