[sysprof/wip/chergert/sysprof-3] proc: use helpers for proc access



commit 6dbb143ea99d0a19c703e0bee77bb646b12bb638
Author: Christian Hergert <chergert redhat com>
Date:   Thu May 9 17:30:24 2019 -0700

    proc: use helpers for proc access

 src/libsysprof/sysprof-proc-source.c | 52 ++++++++++++++----------------------
 1 file changed, 20 insertions(+), 32 deletions(-)
---
diff --git a/src/libsysprof/sysprof-proc-source.c b/src/libsysprof/sysprof-proc-source.c
index 8e3ec27..3068d37 100644
--- a/src/libsysprof/sysprof-proc-source.c
+++ b/src/libsysprof/sysprof-proc-source.c
@@ -43,13 +43,14 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include "sysprof-helpers.h"
 #include "sysprof-proc-source.h"
 
 struct _SysprofProcSource
 {
-  GObject          parent_instance;
+  GObject               parent_instance;
   SysprofCaptureWriter *writer;
-  GArray          *pids;
+  GArray               *pids;
 };
 
 static void    source_iface_init (SysprofSourceInterface *iface);
@@ -64,11 +65,11 @@ static gchar **
 proc_readlines (const gchar *format,
                 ...)
 {
+  SysprofHelpers *helpers = sysprof_helpers_get_default ();
+  g_autofree gchar *filename = NULL;
+  g_autofree gchar *contents = NULL;
   gchar **ret = NULL;
-  gchar *filename = NULL;
-  gchar *contents = NULL;
   va_list args;
-  gsize len;
 
   g_assert (format != NULL);
 
@@ -76,13 +77,10 @@ proc_readlines (const gchar *format,
   filename = g_strdup_vprintf (format, args);
   va_end (args);
 
-  if (g_file_get_contents (filename, &contents, &len, NULL))
+  if (sysprof_helpers_get_proc_file (helpers, filename, NULL, &contents, NULL))
     ret = g_strsplit (contents, "\n", 0);
 
-  g_free (contents);
-  g_free (filename);
-
-  return ret;
+  return g_steal_pointer (&ret);
 }
 
 gchar *
@@ -382,20 +380,19 @@ sysprof_proc_source_populate_maps (SysprofProcSource *self,
 static void
 sysprof_proc_source_populate (SysprofProcSource *self)
 {
+  SysprofHelpers *helpers = sysprof_helpers_get_default ();
   g_auto(GStrv) mounts = NULL;
-  const gchar *name;
-  GDir *dir;
+  g_autofree gint32 *pids = NULL;
+  gsize n_pids = 0;
 
   g_assert (SYSPROF_IS_PROC_SOURCE (self));
 
-  if (NULL == (mounts = proc_readlines ("/proc/mounts")))
+  if (!(mounts = proc_readlines ("/proc/mounts")))
     return;
 
   if (self->pids->len > 0)
     {
-      guint i;
-
-      for (i = 0; i < self->pids->len; i++)
+      for (guint i = 0; i < self->pids->len; i++)
         {
           GPid pid = g_array_index (self->pids, GPid, i);
 
@@ -406,23 +403,14 @@ sysprof_proc_source_populate (SysprofProcSource *self)
       return;
     }
 
-  if (NULL == (dir = g_dir_open ("/proc", 0, NULL)))
-    return;
-
-  while (NULL != (name = g_dir_read_name (dir)))
+  if (sysprof_helpers_list_processes (helpers, NULL, &pids, &n_pids, NULL))
     {
-      GPid pid;
-      char *end;
-
-      pid = strtol (name, &end, 10);
-      if (pid <= 0 || *end != '\0')
-        continue;
-
-      sysprof_proc_source_populate_process (self, pid);
-      sysprof_proc_source_populate_maps (self, pid, mounts);
+      for (guint i = 0; i < n_pids; i++)
+        {
+          sysprof_proc_source_populate_process (self, pids[i]);
+          sysprof_proc_source_populate_maps (self, pids[i], mounts);
+        }
     }
-
-  g_dir_close (dir);
 }
 
 static void
@@ -461,7 +449,7 @@ sysprof_proc_source_set_writer (SysprofSource        *source,
 
 static void
 sysprof_proc_source_add_pid (SysprofSource *source,
-                        GPid      pid)
+                             GPid           pid)
 {
   SysprofProcSource *self = (SysprofProcSource *)source;
   guint i;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]