]> granicus.if.org Git - procps-ng/commitdiff
library: make sure that the proc_t is now fixed length
authorJim Warner <james.warner@comcast.net>
Thu, 2 Jun 2016 05:00:00 +0000 (00:00 -0500)
committerCraig Small <csmall@dropbear.xyz>
Tue, 7 Jun 2016 10:49:30 +0000 (20:49 +1000)
The former variable length structure created potential
problems for library users like that referenced below.

We will now parallel the same approach newlib uses for
the configure options --enable-oomem & --with-systemd.
Thus, the --enable-oomem and OOMEM_ENABLE #define have
been eliminated and the --with-systemd option (#define
WITH_SYSTEMD) will hereafter impact one function only.

The proc_t struct itself will now *never* be impacted.

Reference(s):
https://gitlab.com/procps-ng/procps/issues/31

Signed-off-by: Jim Warner <james.warner@comcast.net>
configure.ac
proc/readproc.c
proc/readproc.h

index 80863ecd4d9217cf1d998df7917b2748c735bf54..32d0f728efccf39ecda9f6236c5ac0f9ad7817ab 100644 (file)
@@ -182,14 +182,6 @@ AC_ARG_ENABLE([examples],
 )
 AM_CONDITIONAL(EXAMPLE_FILES, test "x$enable_examples" = xyes)
 
-AC_ARG_ENABLE([oomem],
-  AS_HELP_STRING([--enable-oomem], [add out-of-memory fields to the library and top]),
-  [], [enable_oomem=no]
-)
-if test "x$enable_oomem" = xyes; then
-  AC_DEFINE(OOMEM_ENABLE, 1, [add out-of-memory fields to the library and top])
-fi
-
 AC_ARG_ENABLE([sigwinch],
   AS_HELP_STRING([--enable-sigwinch], [reduce impact of x-windows resize operations on top]),
   [], [enable_sigwinch=no]
index e06bd0ff8918cc22e3505fc3bd28d6c1c374bb85..f28a062d8669fb8ddb254e91b1712a90bf13668a 100644 (file)
@@ -95,7 +95,6 @@ static inline void free_acquired (proc_t *p, int reuse) {
         if (p->cgroup)   free((void*)*p->cgroup);
         if (p->supgid)   free(p->supgid);
         if (p->supgrp)   free(p->supgrp);
-#ifdef WITH_SYSTEMD
         if (p->sd_mach)  free(p->sd_mach);
         if (p->sd_ouid)  free(p->sd_ouid);
         if (p->sd_seat)  free(p->sd_seat);
@@ -103,7 +102,6 @@ static inline void free_acquired (proc_t *p, int reuse) {
         if (p->sd_slice) free(p->sd_slice);
         if (p->sd_unit)  free(p->sd_unit);
         if (p->sd_uunit) free(p->sd_uunit);
-#endif
 #ifdef QUICK_THREADS
     }
 #endif
@@ -467,7 +465,6 @@ static void supgrps_from_supgids (proc_t *p) {
 }
 
 ///////////////////////////////////////////////////////////////////////
-#ifdef OOMEM_ENABLE
 static void oomscore2proc(const char* S, proc_t *restrict P)
 {
     sscanf(S, "%d", &P->oom_score);
@@ -477,7 +474,6 @@ static void oomadj2proc(const char* S, proc_t *restrict P)
 {
     sscanf(S, "%d", &P->oom_adj);
 }
-#endif
 ///////////////////////////////////////////////////////////////////////
 
 static const char *ns_names[] = {
@@ -520,8 +516,8 @@ static void ns2proc(const char *directory, proc_t *restrict p) {
     }
 }
 
-#ifdef WITH_SYSTEMD
 static void sd2proc(proc_t *restrict p) {
+#ifdef WITH_SYSTEMD
     char buf[64];
     uid_t uid;
 
@@ -534,7 +530,6 @@ static void sd2proc(proc_t *restrict p) {
         snprintf(buf, sizeof(buf), "%d", (int)uid);
         p->sd_ouid = strdup(buf);
     }
-
     if (0 > sd_pid_get_session(p->tid, &p->sd_sess)) {
         p->sd_sess = strdup("-");
         p->sd_seat = strdup("-");
@@ -542,17 +537,22 @@ static void sd2proc(proc_t *restrict p) {
         if (0 > sd_session_get_seat(p->sd_sess, &p->sd_seat))
             p->sd_seat = strdup("-");
     }
-
     if (0 > sd_pid_get_slice(p->tid, &p->sd_slice))
         p->sd_slice = strdup("-");
-
     if (0 > sd_pid_get_unit(p->tid, &p->sd_unit))
         p->sd_unit = strdup("-");
-
     if (0 > sd_pid_get_user_unit(p->tid, &p->sd_uunit))
         p->sd_uunit = strdup("-");
-}
+#else
+    p->sd_mach  = strdup("?");
+    p->sd_ouid  = strdup("?");
+    p->sd_seat  = strdup("?");
+    p->sd_sess  = strdup("?");
+    p->sd_slice = strdup("?");
+    p->sd_unit  = strdup("?");
+    p->sd_uunit = strdup("?");
 #endif
+}
 ///////////////////////////////////////////////////////////////////////
 
 
@@ -992,22 +992,18 @@ static proc_t* simple_readproc(PROCTAB *restrict const PT, proc_t *restrict cons
     } else
         p->cgroup = NULL;
 
-#ifdef OOMEM_ENABLE
     if (unlikely(flags & PROC_FILLOOM)) {
         if (likely(file2str(path, "oom_score", &ub) != -1))
             oomscore2proc(ub.buf, p);
         if (likely(file2str(path, "oom_adj", &ub) != -1))
             oomadj2proc(ub.buf, p);
     }
-#endif
 
     if (unlikely(flags & PROC_FILLNS))          // read /proc/#/ns/*
         ns2proc(path, p);
 
-#ifdef WITH_SYSTEMD
     if (unlikely(flags & PROC_FILLSYSTEMD))     // get sd-login.h stuff
         sd2proc(p);
-#endif
 
     if (unlikely(flags & PROC_FILL_LXC))        // value the lxc name
         p->lxcname = lxc_containers(path);
@@ -1115,10 +1111,8 @@ static proc_t* simple_readtask(PROCTAB *restrict const PT, const proc_t *restric
         } else
             t->cgroup = NULL;
 
-#ifdef WITH_SYSTEMD
         if (unlikely(flags & PROC_FILLSYSTEMD))         // get sd-login.h stuff
             sd2proc(t);
-#endif
 
         if (unlikely(flags & PROC_FILL_LXC))            // value the lxc name
             t->lxcname = lxc_containers(path);
@@ -1138,7 +1132,6 @@ static proc_t* simple_readtask(PROCTAB *restrict const PT, const proc_t *restric
         if (t->supgid) free(t->supgid);
         t->supgid   = p->supgid;
         t->supgrp   = p->supgrp;
-#ifdef WITH_SYSTEMD
         t->sd_mach  = p->sd_mach;
         t->sd_ouid  = p->sd_ouid;
         t->sd_seat  = p->sd_seat;
@@ -1146,20 +1139,17 @@ static proc_t* simple_readtask(PROCTAB *restrict const PT, const proc_t *restric
         t->sd_slice = p->sd_slice;
         t->sd_unit  = p->sd_unit;
         t->sd_uunit = p->sd_uunit;
-#endif
         t->lxcname = p->lxcname;
         MK_THREAD(t);
     }
 #endif
 
-#ifdef OOMEM_ENABLE
     if (unlikely(flags & PROC_FILLOOM)) {
         if (likely(file2str(path, "oom_score", &ub) != -1))
             oomscore2proc(ub.buf, t);
         if (likely(file2str(path, "oom_adj", &ub) != -1))
             oomadj2proc(ub.buf, t);
     }
-#endif
 
     if (unlikely(flags & PROC_FILLNS))                  // read /proc/#/task/#/ns/*
         ns2proc(path, t);
index f87b0e9f841d0a61165216ae4b05819779a80605..ee7f5ca55f64a04b882d4e78d4c5c3e04fa7f891 100644 (file)
@@ -167,14 +167,11 @@ typedef struct proc_t {
        tpgid,          // stat            terminal process group id
        exit_signal,    // stat            might not be SIGCHLD
        processor;      // stat            current (or most recent?) CPU
-#ifdef OOMEM_ENABLE
     int
         oom_score,      // oom_score       (badness for OOM killer)
         oom_adj;        // oom_adj         (adjustment to OOM score)
-#endif
     long
         ns[NUM_NS];     // (ns subdir)     inode number of namespaces
-#ifdef WITH_SYSTEMD
     char
         *sd_mach,       // n/a             systemd vm/container name
         *sd_ouid,       // n/a             systemd session owner uid
@@ -183,7 +180,6 @@ typedef struct proc_t {
         *sd_slice,      // n/a             systemd slice unit
         *sd_unit,       // n/a             systemd system unit id
         *sd_uunit;      // n/a             systemd user unit id
-#endif
     const char
         *lxcname;       // n/a             lxc container name
 } proc_t;