diff options
Diffstat (limited to 'dutmp.c')
-rw-r--r-- | dutmp.c | 35 |
1 files changed, 16 insertions, 19 deletions
@@ -8,22 +8,20 @@ * versions of 'who', 'last', etc. IP Addr is output in hex, * little endian on x86. * - * made against libc6 + * Modified to support all sort of libcs by + * Erik Andersen <andersen@lineo.com> */ #include "internal.h" -#include <stdio.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> + #include <errno.h> #define BB_DECLARE_EXTERN #define bb_need_io_error #include "messages.c" - -#if defined(__GLIBC__) #include <utmp.h> -#else -#include <utmp-wrap.h> -#define utmp new_utmp -#endif static const char dutmp_usage[] = "dutmp [FILE]\n" @@ -36,27 +34,26 @@ static const char dutmp_usage[] = "dutmp [FILE]\n" extern int dutmp_main(int argc, char **argv) { - FILE *f; + int file; struct utmp ut; if (argc<2) { - f = stdin; + file = fileno(stdin); } else if (*argv[1] == '-' ) { usage(dutmp_usage); } else { - f = fopen(argv[1], "r"); - if (f == NULL) { + file = open(argv[1], O_RDONLY); + if (file < 0) { fatalError(io_error, argv[1], strerror(errno)); } } - while (fread(&ut, sizeof(struct utmp), 1, f)) { - printf("%d|%d|%s|%s|%s|%s|%d|%d|%ld|%ld|%ld|%x\n", - ut.ut_type, ut.ut_pid, ut.ut_line, - ut.ut_id, ut.ut_user, ut.ut_host, - ut.ut_exit.e_termination, ut.ut_exit.e_exit, - ut.ut_session, ut.ut_tv.tv_sec, ut.ut_tv.tv_usec, - ut.ut_addr_v6[0]); + while (read(file, (void*)&ut, sizeof(struct utmp))) { + printf("%d|%d|%s|%s|%s|%s|%s|%lx\n", + ut.ut_type, ut.ut_pid, ut.ut_line, + ut.ut_id, ut.ut_user, ut.ut_host, + ctime(&(ut.ut_time)), + (long)ut.ut_addr); } exit(TRUE); |