Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.bin/time modernize:



details:   https://anonhg.NetBSD.org/src/rev/70e9b19d59eb
branches:  trunk
changeset: 534098:70e9b19d59eb
user:      christos <christos%NetBSD.org@localhost>
date:      Tue Jul 16 15:41:57 2002 +0000

description:
modernize:
        - use wait4
        - KNF
        - factor out common printf code
        - use err/warn
        - use getprogname

diffstat:

 usr.bin/time/Makefile |    3 +-
 usr.bin/time/time.c   |  116 +++++++++++++++++++++++--------------------------
 2 files changed, 56 insertions(+), 63 deletions(-)

diffs (196 lines):

diff -r 56bf046d2a2d -r 70e9b19d59eb usr.bin/time/Makefile
--- a/usr.bin/time/Makefile     Tue Jul 16 14:20:04 2002 +0000
+++ b/usr.bin/time/Makefile     Tue Jul 16 15:41:57 2002 +0000
@@ -1,6 +1,7 @@
-#      $NetBSD: Makefile,v 1.3 1994/12/08 09:36:55 jtc Exp $
+#      $NetBSD: Makefile,v 1.4 2002/07/16 15:41:57 christos Exp $
 #      @(#)Makefile    8.1 (Berkeley) 6/6/93
 
+WARNS=2
 PROG=  time
 
 .include <bsd.prog.mk>
diff -r 56bf046d2a2d -r 70e9b19d59eb usr.bin/time/time.c
--- a/usr.bin/time/time.c       Tue Jul 16 14:20:04 2002 +0000
+++ b/usr.bin/time/time.c       Tue Jul 16 15:41:57 2002 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: time.c,v 1.11 1999/06/05 19:19:19 kleink Exp $ */
+/*     $NetBSD: time.c,v 1.12 2002/07/16 15:41:57 christos Exp $       */
 
 /*
  * Copyright (c) 1987, 1988, 1993
@@ -43,7 +43,7 @@
 #if 0
 static char sccsid[] = "@(#)time.c     8.1 (Berkeley) 6/6/93";
 #endif
-__RCSID("$NetBSD: time.c,v 1.11 1999/06/05 19:19:19 kleink Exp $");
+__RCSID("$NetBSD: time.c,v 1.12 2002/07/16 15:41:57 christos Exp $");
 #endif /* not lint */
 
 #include <sys/types.h>
@@ -51,20 +51,21 @@
 #include <sys/resource.h>
 #include <sys/wait.h>
 #include <errno.h>
+#include <err.h>
 #include <locale.h>
 #include <signal.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
 
-
-int            main __P((int, char **));
-static void    usage __P((void));
+int            main(int, char **);
+static void    usage(void);
+static void    prl(long, const char *);
+static void    prtv(const char *, const char *, const struct timeval *,
+    const char *);
 
 int
-main(argc, argv)
-       int argc;
-       char **argv;
+main(int argc, char **argv)
 {
        int pid;
        int ch, status;
@@ -103,24 +104,23 @@
        gettimeofday(&before, (struct timezone *)NULL);
        switch(pid = vfork()) {
        case -1:                        /* error */
-               perror("vfork");
-               exit(EXIT_FAILURE);
+               err(EXIT_FAILURE, "Vfork failed");
                /* NOTREACHED */
        case 0:                         /* child */
                /* LINTED will return only on failure */
                execvp(*argv, argv);
-               perror(*argv);
-               _exit((errno == ENOENT) ? 127 : 126);
+               err((errno == ENOENT) ? 127 : 126, "Can't exec `%s'", *argv);
                /* NOTREACHED */
        }
 
        /* parent */
        (void)signal(SIGINT, SIG_IGN);
        (void)signal(SIGQUIT, SIG_IGN);
-       while (wait3(&status, 0, &ru) != pid);
-       gettimeofday(&after, (struct timezone *)NULL);
+       if ((pid = wait4(pid, &status, 0, &ru)) == -1)
+               err(EXIT_FAILURE, "wait4 %d failed", pid);
+       (void)gettimeofday(&after, (struct timezone *)NULL);
        if (!WIFEXITED(status))
-               fprintf(stderr, "Command terminated abnormally.\n");
+               warnx("Command terminated abnormally.");
        timersub(&after, &before, &after);
 
        if ((lconv = localeconv()) == NULL ||
@@ -128,67 +128,59 @@
                decpt = ".";
 
        if (portableflag) {
-               fprintf (stderr, "real %9ld%s%02ld\n", 
-                       (long)after.tv_sec, decpt, (long)after.tv_usec/10000);
-               fprintf (stderr, "user %9ld%s%02ld\n",
-                       (long)ru.ru_utime.tv_sec, decpt, (long)ru.ru_utime.tv_usec/10000);
-               fprintf (stderr, "sys  %9ld%s%02ld\n",
-                       (long)ru.ru_stime.tv_sec, decpt, (long)ru.ru_stime.tv_usec/10000);
+               prtv("real ", decpt, &after, "\n");
+               prtv("user ", decpt, &ru.ru_utime, "\n");
+               prtv("sys  ", decpt, &ru.ru_stime, "\n");
        } else {
-
-               fprintf(stderr, "%9ld%s%02ld real ", 
-                       (long)after.tv_sec, decpt, (long)after.tv_usec/10000);
-               fprintf(stderr, "%9ld%s%02ld user ",
-                       (long)ru.ru_utime.tv_sec, decpt, (long)ru.ru_utime.tv_usec/10000);
-               fprintf(stderr, "%9ld%s%02ld sys\n",
-                       (long)ru.ru_stime.tv_sec, decpt, (long)ru.ru_stime.tv_usec/10000);
+               prtv("", decpt, &after, " real ");
+               prtv("", decpt, &ru.ru_utime, " user ");
+               prtv("", decpt, &ru.ru_stime, " sys\n");
        }
 
        if (lflag) {
                int hz = (int)sysconf(_SC_CLK_TCK);
-               long ticks;
+               unsigned long long ticks;
+#define SCALE(x) (long)(ticks ? x / ticks : 0)
 
                ticks = hz * (ru.ru_utime.tv_sec + ru.ru_stime.tv_sec) +
                     hz * (ru.ru_utime.tv_usec + ru.ru_stime.tv_usec) / 1000000;
-
-               fprintf(stderr, "%10ld  %s\n",
-                       ru.ru_maxrss, "maximum resident set size");
-               fprintf(stderr, "%10ld  %s\n", ticks ? ru.ru_ixrss / ticks : 0,
-                       "average shared memory size");
-               fprintf(stderr, "%10ld  %s\n", ticks ? ru.ru_idrss / ticks : 0,
-                       "average unshared data size");
-               fprintf(stderr, "%10ld  %s\n", ticks ? ru.ru_isrss / ticks : 0,
-                       "average unshared stack size");
-               fprintf(stderr, "%10ld  %s\n",
-                       ru.ru_minflt, "page reclaims");
-               fprintf(stderr, "%10ld  %s\n",
-                       ru.ru_majflt, "page faults");
-               fprintf(stderr, "%10ld  %s\n",
-                       ru.ru_nswap, "swaps");
-               fprintf(stderr, "%10ld  %s\n",
-                       ru.ru_inblock, "block input operations");
-               fprintf(stderr, "%10ld  %s\n",
-                       ru.ru_oublock, "block output operations");
-               fprintf(stderr, "%10ld  %s\n",
-                       ru.ru_msgsnd, "messages sent");
-               fprintf(stderr, "%10ld  %s\n",
-                       ru.ru_msgrcv, "messages received");
-               fprintf(stderr, "%10ld  %s\n",
-                       ru.ru_nsignals, "signals received");
-               fprintf(stderr, "%10ld  %s\n",
-                       ru.ru_nvcsw, "voluntary context switches");
-               fprintf(stderr, "%10ld  %s\n",
-                       ru.ru_nivcsw, "involuntary context switches");
+               prl(ru.ru_maxrss, "maximum resident set size");
+               prl(SCALE(ru.ru_ixrss), "average shared memory size");
+               prl(SCALE(ru.ru_idrss), "average unshared data size");
+               prl(SCALE(ru.ru_isrss), "average unshared stack size");
+               prl(ru.ru_minflt, "page reclaims");
+               prl(ru.ru_majflt, "page faults");
+               prl(ru.ru_nswap, "swaps");
+               prl(ru.ru_inblock, "block input operations");
+               prl(ru.ru_oublock, "block output operations");
+               prl(ru.ru_msgsnd, "messages sent");
+               prl(ru.ru_msgrcv, "messages received");
+               prl(ru.ru_nsignals, "signals received");
+               prl(ru.ru_nvcsw, "voluntary context switches");
+               prl(ru.ru_nivcsw, "involuntary context switches");
        }
 
-       exit(WIFEXITED(status) ? WEXITSTATUS(status) : EXIT_FAILURE);
-       /* NOTREACHED */
+       return (WIFEXITED(status) ? WEXITSTATUS(status) : EXIT_FAILURE);
 }
 
 static void
 usage()
 {
-
-       fprintf(stderr, "usage: time [-lp] utility [argument ...]\n");
+       (void)fprintf(stderr, "Usage: %s [-lp] utility [argument ...]\n",
+           getprogname());
        exit(EXIT_FAILURE);
 }
+
+static void
+prl(long val, const char *expn)
+{
+    (void)fprintf(stderr, "%10ld  %s\n", val, expn);
+}
+
+static void
+prtv(const char *pre, const char *decpt, const struct timeval *tv,
+    const char *post)
+{
+    (void)fprintf(stderr, "%s%9ld%s%02ld%s", pre, (long)tv->tv_sec, decpt,
+       (long)tv->tv_usec / 10000, post);
+}



Home | Main Index | Thread Index | Old Index