]> granicus.if.org Git - procps-ng/commitdiff
H m -m -L -T are all working
authoralbert <>
Tue, 21 Oct 2003 00:51:36 +0000 (00:51 +0000)
committeralbert <>
Tue, 21 Oct 2003 00:51:36 +0000 (00:51 +0000)
proc/readproc.c
ps/display.c
top.c

index 2dd46da9eac1ecd6071d9d5b0bc021765583213b..d7e195cb64769e00fe71fb949627c022ca5824f9 100644 (file)
@@ -666,7 +666,7 @@ static int simple_nexttid(PROCTAB *restrict const PT, const proc_t *restrict con
       closedir(PT->taskdir);
     }
     // use "path" as some tmp space
-    snprintf(path, PROCPATHLEN, "%s/task", PT->path);
+    snprintf(path, PROCPATHLEN, "/proc/%d/task", p->tgid);
     PT->taskdir = opendir(path);
     if(!PT->taskdir) return 0;
     PT->taskdir_user = p->tgid;
@@ -679,7 +679,7 @@ static int simple_nexttid(PROCTAB *restrict const PT, const proc_t *restrict con
   t->tid = strtoul(ent->d_name, NULL, 10);
   t->tgid = p->tgid;
   t->ppid = p->ppid;  // cover for kernel behavior? we want both actually...?
-  snprintf(path, PROCPATHLEN, "%s/task/%s", PT->path, ent->d_name);
+  snprintf(path, PROCPATHLEN, "/proc/%d/task/%s", p->tgid, ent->d_name);
   return 1;
 }
 
index 47fd4270a5726cbeeda7462515acf24704d3184c..a52769b4837ea7a5828fcd04be6b6349b5f9cae0 100644 (file)
@@ -330,19 +330,51 @@ static void simple_spew(void){
     exit(1);
   }
   memset(&buf, '#', sizeof(proc_t));
-  while(readproc(ptp,&buf)){
-    if(want_this_proc(&buf)){
-      if(thread_flags & TF_show_proc) show_one_proc(&buf, proc_format_list);
-      if(thread_flags & TF_show_task){
+  switch(thread_flags & (TF_show_proc|TF_loose_tasks|TF_show_task)){
+  case TF_show_proc:                   // normal non-thread output
+    while(readproc(ptp,&buf)){
+      if(want_this_proc(&buf)){
+        show_one_proc(&buf, proc_format_list);
+      }
+      if(buf.cmdline) free((void*)*buf.cmdline); // ought to reuse
+      if(buf.environ) free((void*)*buf.environ); // ought to reuse
+    }
+    break;
+  case TF_show_proc|TF_loose_tasks:    // H option
+    while(readproc(ptp,&buf)){
+      proc_t buf2;
+      // must still have the process allocated
+      while(readtask(ptp,&buf,&buf2)){
+        if(!want_this_proc(&buf)) continue;
+        show_one_proc(&buf2, task_format_list);
+      }
+      if(buf.cmdline) free((void*)*buf.cmdline); // ought to reuse
+      if(buf.environ) free((void*)*buf.environ); // ought to reuse
+    }
+    break;
+  case TF_show_proc|TF_show_task:      // m and -m options
+    while(readproc(ptp,&buf)){
+      if(want_this_proc(&buf)){
+        proc_t buf2;
+        show_one_proc(&buf, proc_format_list);
+        // must still have the process allocated
+        while(readtask(ptp,&buf,&buf2)) show_one_proc(&buf2, task_format_list);
+      }
+      if(buf.cmdline) free((void*)*buf.cmdline); // ought to reuse
+      if(buf.environ) free((void*)*buf.environ); // ought to reuse
+    }
+    break;
+  case TF_show_task:                   // -L and -T options
+    while(readproc(ptp,&buf)){
+      if(want_this_proc(&buf)){
         proc_t buf2;
         // must still have the process allocated
         while(readtask(ptp,&buf,&buf2)) show_one_proc(&buf2, task_format_list);
-        // must not attempt to free cmdline and environ
       }
+      if(buf.cmdline) free((void*)*buf.cmdline); // ought to reuse
+      if(buf.environ) free((void*)*buf.environ); // ought to reuse
     }
-    if(buf.cmdline) free((void*)*buf.cmdline); // ought to reuse
-    if(buf.environ) free((void*)*buf.environ); // ought to reuse
-//    memset(&buf, '#', sizeof(proc_t));
+    break;
   }
   closeproc(ptp);
 }
diff --git a/top.c b/top.c
index 6d4ebb728b8f401e32ffab1d7219f88b9ee2d53c..898e9b1f2cb1fdc6b40f6ed0df73cde8880311cb 100644 (file)
--- a/top.c
+++ b/top.c
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+
+// Foul POS defines all sorts of stuff...
 #include <term.h>
+#undef tab
+
 #include <termios.h>
 #include <time.h>
 #include <unistd.h>