diff options
Diffstat (limited to 'package/busybox/busybox-1.15.1-pidof_killall.patch')
-rw-r--r-- | package/busybox/busybox-1.15.1-pidof_killall.patch | 250 |
1 files changed, 0 insertions, 250 deletions
diff --git a/package/busybox/busybox-1.15.1-pidof_killall.patch b/package/busybox/busybox-1.15.1-pidof_killall.patch deleted file mode 100644 index 43c0c8063..000000000 --- a/package/busybox/busybox-1.15.1-pidof_killall.patch +++ /dev/null @@ -1,250 +0,0 @@ -diff -urpN busybox-1.15.1/libbb/procps.c busybox-1.15.1-pidof_killall/libbb/procps.c ---- busybox-1.15.1/libbb/procps.c 2009-09-12 17:55:58.000000000 +0200 -+++ busybox-1.15.1-pidof_killall/libbb/procps.c 2009-09-22 23:03:59.000000000 +0200 -@@ -134,8 +134,8 @@ static unsigned long fast_strtoul_16(cha - return n; - } - /* TOPMEM uses fast_strtoul_10, so... */ --#undef ENABLE_FEATURE_FAST_TOP --#define ENABLE_FEATURE_FAST_TOP 1 -+# undef ENABLE_FEATURE_FAST_TOP -+# define ENABLE_FEATURE_FAST_TOP 1 - #endif - - #if ENABLE_FEATURE_FAST_TOP -@@ -198,14 +198,16 @@ procps_status_t* FAST_FUNC procps_scan(p - if (errno) - continue; - -- /* After this point we have to break, not continue -- * ("continue" would mean that current /proc/NNN -- * is not a valid process info) */ -+ /* After this point we can: -+ * "break": stop parsing, return the data -+ * "continue": try next /proc/XXX -+ */ - - memset(&sp->vsz, 0, sizeof(*sp) - offsetof(procps_status_t, vsz)); - - sp->pid = pid; -- if (!(flags & ~PSSCAN_PID)) break; -+ if (!(flags & ~PSSCAN_PID)) -+ break; /* we needed only pid, we got it */ - - #if ENABLE_SELINUX - if (flags & PSSCAN_CONTEXT) { -@@ -218,7 +220,7 @@ procps_status_t* FAST_FUNC procps_scan(p - - if (flags & PSSCAN_UIDGID) { - if (stat(filename, &sb)) -- break; -+ continue; /* process probably exited */ - /* Effective UID/GID, not real */ - sp->uid = sb.st_uid; - sp->gid = sb.st_gid; -@@ -234,10 +236,10 @@ procps_status_t* FAST_FUNC procps_scan(p - strcpy(filename_tail, "stat"); - n = read_to_buf(filename, buf); - if (n < 0) -- break; -+ continue; /* process probably exited */ - cp = strrchr(buf, ')'); /* split into "PID (cmd" and "<rest>" */ - /*if (!cp || cp[1] != ' ') -- break;*/ -+ continue;*/ - cp[0] = '\0'; - if (sizeof(sp->comm) < 16) - BUG_comm_size(); -@@ -257,12 +259,12 @@ procps_status_t* FAST_FUNC procps_scan(p - "%lu " /* start_time */ - "%lu " /* vsize */ - "%lu " /* rss */ --#if ENABLE_FEATURE_TOP_SMP_PROCESS -+# if ENABLE_FEATURE_TOP_SMP_PROCESS - "%*s %*s %*s %*s %*s %*s " /*rss_rlim, start_code, end_code, start_stack, kstk_esp, kstk_eip */ - "%*s %*s %*s %*s " /*signal, blocked, sigignore, sigcatch */ - "%*s %*s %*s %*s " /*wchan, nswap, cnswap, exit_signal */ - "%d" /*cpu last seen on*/ --#endif -+# endif - , - sp->state, &sp->ppid, - &sp->pgid, &sp->sid, &tty, -@@ -271,17 +273,17 @@ procps_status_t* FAST_FUNC procps_scan(p - &sp->start_time, - &vsz, - &rss --#if ENABLE_FEATURE_TOP_SMP_PROCESS -+# if ENABLE_FEATURE_TOP_SMP_PROCESS - , &sp->last_seen_on_cpu --#endif -+# endif - ); - - if (n < 11) -- break; --#if ENABLE_FEATURE_TOP_SMP_PROCESS -+ continue; /* bogus data, get next /proc/XXX */ -+# if ENABLE_FEATURE_TOP_SMP_PROCESS - if (n < 11+15) - sp->last_seen_on_cpu = 0; --#endif -+# endif - - /* vsz is in bytes and we want kb */ - sp->vsz = vsz >> 10; -@@ -311,14 +313,14 @@ procps_status_t* FAST_FUNC procps_scan(p - sp->vsz = fast_strtoul_10(&cp) >> 10; - /* vsz is in bytes but rss is in *PAGES*! Can you believe that? */ - sp->rss = fast_strtoul_10(&cp) << sp->shift_pages_to_kb; --#if ENABLE_FEATURE_TOP_SMP_PROCESS -+# if ENABLE_FEATURE_TOP_SMP_PROCESS - /* (6): rss_rlim, start_code, end_code, start_stack, kstk_esp, kstk_eip */ - /* (4): signal, blocked, sigignore, sigcatch */ - /* (4): wchan, nswap, cnswap, exit_signal */ - cp = skip_fields(cp, 14); - //FIXME: is it safe to assume this field exists? - sp->last_seen_on_cpu = fast_strtoul_10(&cp); --#endif -+# endif - #endif /* end of !ENABLE_FEATURE_TOP_SMP_PROCESS */ - - #if ENABLE_FEATURE_PS_ADDITIONAL_COLUMNS -@@ -343,48 +345,48 @@ procps_status_t* FAST_FUNC procps_scan(p - - strcpy(filename_tail, "smaps"); - file = fopen_for_read(filename); -- if (!file) -- break; -- while (fgets(buf, sizeof(buf), file)) { -- unsigned long sz; -- char *tp; -- char w; -+ if (file) { -+ while (fgets(buf, sizeof(buf), file)) { -+ unsigned long sz; -+ char *tp; -+ char w; - #define SCAN(str, name) \ - if (strncmp(buf, str, sizeof(str)-1) == 0) { \ - tp = skip_whitespace(buf + sizeof(str)-1); \ - sp->name += fast_strtoul_10(&tp); \ - continue; \ - } -- SCAN("Shared_Clean:" , shared_clean ); -- SCAN("Shared_Dirty:" , shared_dirty ); -- SCAN("Private_Clean:", private_clean); -- SCAN("Private_Dirty:", private_dirty); -+ SCAN("Shared_Clean:" , shared_clean ); -+ SCAN("Shared_Dirty:" , shared_dirty ); -+ SCAN("Private_Clean:", private_clean); -+ SCAN("Private_Dirty:", private_dirty); - #undef SCAN -- // f7d29000-f7d39000 rw-s ADR M:m OFS FILE -- tp = strchr(buf, '-'); -- if (tp) { -- *tp = ' '; -- tp = buf; -- sz = fast_strtoul_16(&tp); /* start */ -- sz = (fast_strtoul_16(&tp) - sz) >> 10; /* end - start */ -- // tp -> "rw-s" string -- w = tp[1]; -- // skipping "rw-s ADR M:m OFS " -- tp = skip_whitespace(skip_fields(tp, 4)); -- // filter out /dev/something (something != zero) -- if (strncmp(tp, "/dev/", 5) != 0 || strcmp(tp, "/dev/zero\n") == 0) { -- if (w == 'w') { -- sp->mapped_rw += sz; -- } else if (w == '-') { -- sp->mapped_ro += sz; -+ // f7d29000-f7d39000 rw-s ADR M:m OFS FILE -+ tp = strchr(buf, '-'); -+ if (tp) { -+ *tp = ' '; -+ tp = buf; -+ sz = fast_strtoul_16(&tp); /* start */ -+ sz = (fast_strtoul_16(&tp) - sz) >> 10; /* end - start */ -+ // tp -> "rw-s" string -+ w = tp[1]; -+ // skipping "rw-s ADR M:m OFS " -+ tp = skip_whitespace(skip_fields(tp, 4)); -+ // filter out /dev/something (something != zero) -+ if (strncmp(tp, "/dev/", 5) != 0 || strcmp(tp, "/dev/zero\n") == 0) { -+ if (w == 'w') { -+ sp->mapped_rw += sz; -+ } else if (w == '-') { -+ sp->mapped_ro += sz; -+ } - } -- } - //else printf("DROPPING %s (%s)\n", buf, tp); -- if (strcmp(tp, "[stack]\n") == 0) -- sp->stack += sz; -+ if (strcmp(tp, "[stack]\n") == 0) -+ sp->stack += sz; -+ } - } -+ fclose(file); - } -- fclose(file); - } - #endif /* TOPMEM */ - #if ENABLE_FEATURE_PS_ADDITIONAL_COLUMNS -@@ -393,23 +395,34 @@ procps_status_t* FAST_FUNC procps_scan(p - - strcpy(filename_tail, "status"); - file = fopen_for_read(filename); -- if (!file) -- break; -- while (fgets(buf, sizeof(buf), file)) { -- char *tp; -+ if (file) { -+ while (fgets(buf, sizeof(buf), file)) { -+ char *tp; - #define SCAN_TWO(str, name, statement) \ - if (strncmp(buf, str, sizeof(str)-1) == 0) { \ - tp = skip_whitespace(buf + sizeof(str)-1); \ - sscanf(tp, "%u", &sp->name); \ - statement; \ - } -- SCAN_TWO("Uid:", ruid, continue); -- SCAN_TWO("Gid:", rgid, break); -+ SCAN_TWO("Uid:", ruid, continue); -+ SCAN_TWO("Gid:", rgid, break); - #undef SCAN_TWO -+ } -+ fclose(file); - } -- fclose(file); - } - #endif /* PS_ADDITIONAL_COLUMNS */ -+ if (flags & PSSCAN_EXE) { -+ strcpy(filename_tail, "exe"); -+ free(sp->exe); -+ sp->exe = xmalloc_readlink(filename); -+ } -+ /* Note: if /proc/PID/cmdline is empty, -+ * code below "breaks". Therefore it must be -+ * the last code to parse /proc/PID/xxx data -+ * (we used to have /proc/PID/exe parsing after it -+ * and were getting stale sp->exe). -+ */ - #if 0 /* PSSCAN_CMD is not used */ - if (flags & (PSSCAN_CMD|PSSCAN_ARGV0)) { - free(sp->argv0); -@@ -452,13 +465,9 @@ procps_status_t* FAST_FUNC procps_scan(p - } - } - #endif -- if (flags & PSSCAN_EXE) { -- strcpy(filename_tail, "exe"); -- free(sp->exe); -- sp->exe = xmalloc_readlink(filename); -- } - break; -- } -+ } /* for (;;) */ -+ - return sp; - } - |