diff options
Diffstat (limited to 'package/busybox/busybox-1.20.1/busybox-1.20.1-ps.patch')
-rw-r--r-- | package/busybox/busybox-1.20.1/busybox-1.20.1-ps.patch | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/package/busybox/busybox-1.20.1/busybox-1.20.1-ps.patch b/package/busybox/busybox-1.20.1/busybox-1.20.1-ps.patch new file mode 100644 index 000000000..c8e329ec3 --- /dev/null +++ b/package/busybox/busybox-1.20.1/busybox-1.20.1-ps.patch @@ -0,0 +1,84 @@ +--- busybox-1.20.1/procps/ps.c ++++ busybox-1.20.1-ps/procps/ps.c +@@ -69,6 +69,31 @@ + /* Absolute maximum on output line length */ + enum { MAX_WIDTH = 2*1024 }; + ++#if ENABLE_FEATURE_PS_TIME || ENABLE_FEATURE_PS_LONG ++static long get_uptime(void) ++{ ++#ifdef __linux__ ++ struct sysinfo info; ++ if (sysinfo(&info) < 0) ++ return 0; ++ return info.uptime; ++#elif 1 ++ char buf[64]; ++ long uptime; ++ if (open_read_close("/proc/uptime", buf, sizeof(buf)) <= 0) ++ bb_perror_msg_and_die("can't read %s", "/proc/uptime"); ++ buf[sizeof(buf)-1] = '\0'; ++ sscanf(buf, "%l", &uptime); ++ return uptime; ++#else ++ struct timespec ts; ++ if (clock_gettime(CLOCK_MONOTONIC, &ts) < 0) ++ return 0; ++ return ts.tv_sec; ++#endif ++} ++#endif ++ + #if ENABLE_DESKTOP + + #include <sys/times.h> /* for times() */ +@@ -197,8 +222,6 @@ static inline unsigned get_HZ_by_waiting + + static unsigned get_kernel_HZ(void) + { +- //char buf[64]; +- struct sysinfo info; + + if (kernel_HZ) + return kernel_HZ; +@@ -208,12 +231,7 @@ static unsigned get_kernel_HZ(void) + if (kernel_HZ == (unsigned)-1) + kernel_HZ = get_HZ_by_waiting(); + +- //if (open_read_close("/proc/uptime", buf, sizeof(buf)) <= 0) +- // bb_perror_msg_and_die("can't read %s", "/proc/uptime"); +- //buf[sizeof(buf)-1] = '\0'; +- ///sscanf(buf, "%llu", &seconds_since_boot); +- sysinfo(&info); +- seconds_since_boot = info.uptime; ++ seconds_since_boot = get_uptime(); + + return kernel_HZ; + } +@@ -635,7 +653,7 @@ int ps_main(int argc UNUSED_PARAM, char + }; + #if ENABLE_FEATURE_PS_LONG + time_t now = now; +- struct sysinfo info; ++ long uptime; + #endif + int opts = 0; + /* If we support any options, parse argv */ +@@ -695,7 +713,7 @@ int ps_main(int argc UNUSED_PARAM, char + puts("S UID PID PPID VSZ RSS TTY STIME TIME CMD"); + #if ENABLE_FEATURE_PS_LONG + now = time(NULL); +- sysinfo(&info); ++ uptime = get_uptime(); + #endif + } + else { +@@ -727,7 +745,7 @@ int ps_main(int argc UNUSED_PARAM, char + char tty[2 * sizeof(int)*3 + 2]; + char *endp; + unsigned sut = (p->stime + p->utime) / 100; +- unsigned elapsed = info.uptime - (p->start_time / 100); ++ unsigned elapsed = uptime - (p->start_time / 100); + time_t start = now - elapsed; + struct tm *tm = localtime(&start); + |