]> Zhao Yanbai Git Server - minix.git/commitdiff
uptime(1): also report uptime 82/2782/1
authorDavid van Moolenbroek <david@minix3.org>
Thu, 28 Aug 2014 11:40:55 +0000 (11:40 +0000)
committerDavid van Moolenbroek <david@minix3.org>
Thu, 28 Aug 2014 12:06:50 +0000 (12:06 +0000)
It might be more useful this way.  *cough*

Change-Id: I318169fef8bf7737dc46eebf5c5332ce42a9076a

minix/usr.bin/w/minix_proc.c
minix/usr.bin/w/minix_proc.h
usr.bin/w/w.c

index a5d112fdd3038e44f4fe013626e504315ba74cc4..665196c9ef1b710e4749bbf3bbc68d3f4bbbcb3c 100644 (file)
@@ -129,7 +129,7 @@ minix_getproc(void * __unused dummy, int op, int arg, int elemsize, int *cnt)
        for (i = 0; i < npids; i++) {
                pid = pids[i];
 
-               snprintf(path, sizeof(path), _PATH_PROC "/%u/psinfo", pid);
+               snprintf(path, sizeof(path), _PATH_PROC "%u/psinfo", pid);
 
                /* Processes may legitimately disappear between calls. */
                if ((fp = fopen(path, "r")) == NULL)
@@ -165,7 +165,7 @@ minix_getargv(void * __unused dummy, const struct minix_proc * p, int nchr)
        int fd, argc;
 
        /* Get the command line of the process from procfs. */
-       snprintf(path, sizeof(path), _PATH_PROC "/%u/cmdline", p->p_pid);
+       snprintf(path, sizeof(path), _PATH_PROC "%u/cmdline", p->p_pid);
 
        if ((fd = open(path, O_RDONLY)) < 0)
                return NULL;
@@ -251,3 +251,23 @@ minix_proc_compare(const struct minix_proc * p1, const struct minix_proc * p2)
         */
        return p1->p_pid < p2->p_pid;
 }
+
+/*
+ * Obtain the system uptime in seconds.  Return 0 on success, with the uptime
+ * stored in the given time_t field.  Return -1 on failure.
+ */
+int
+minix_getuptime(time_t *timep)
+{
+       FILE *fp;
+       int r;
+
+       if ((fp = fopen(_PATH_PROC "uptime", "r")) == NULL)
+               return -1;
+
+       r = fscanf(fp, "%llu", timep);
+
+       fclose(fp);
+
+       return (r == 1) ? 0 : -1;
+}
index a216dbb45bfeb6b47c503313b57f11f465309e2d..a38bedbe9973aa7d3d074756ab8bc84230c98687 100644 (file)
@@ -44,4 +44,6 @@ int minix_proc_compare(const struct minix_proc *p1,
 #undef proc_compare_wrapper
 #define proc_compare_wrapper minix_proc_compare
 
+int minix_getuptime(time_t *timep);
+
 #endif /* !_W_MINIX_PROC_H */
index 1516ef3572e1393a22a64ccbf599139f3d96b177..4a80312e3fa1596f3534353de787cb6be2dd23b1 100644 (file)
@@ -475,8 +475,12 @@ pr_header(time_t *nowp, int nusers)
        double avenrun[3];
        time_t uptime;
        int days, hrs, mins;
+#ifndef __minix
        int mib[2];
        size_t size, i;
+#else
+       size_t i;
+#endif /* __minix */
        char buf[256];
 
        /*
@@ -493,12 +497,16 @@ pr_header(time_t *nowp, int nusers)
         * Print how long system has been up.
         * (Found by looking getting "boottime" from the kernel)
         */
+#ifndef __minix
        mib[0] = CTL_KERN;
        mib[1] = KERN_BOOTTIME;
        size = sizeof(boottime);
        if (sysctl(mib, 2, &boottime, &size, NULL, 0) != -1 &&
            boottime.tv_sec != 0) {
                uptime = now - boottime.tv_sec;
+#else
+       if (minix_getuptime(&uptime) != -1) {
+#endif /* __minix */
                uptime += 30;
                if (uptime > SECSPERMIN) {
                        days = uptime / SECSPERDAY;