[gnome-talos] Refactor code into separate files



commit 6e8e1903f1fb147b70e34fa256fe2b109af9c4ef
Author: Colin Walters <walters verbum org>
Date:   Fri Sep 23 14:22:31 2011 -0400

    Refactor code into separate files

 Makefile-src.am           |    6 +-
 src/gnome-talos-meminfo.c |  204 +++++++++++++++++++++++++++++++++++
 src/gnome-talos-meminfo.h |    6 +
 src/gnome-talos-meta.c    |   55 ++++++++++
 src/gnome-talos-meta.h    |    6 +
 src/gnome-talos-session.c |  257 +--------------------------------------------
 6 files changed, 280 insertions(+), 254 deletions(-)
---
diff --git a/Makefile-src.am b/Makefile-src.am
index 560deb9..b1df945 100644
--- a/Makefile-src.am
+++ b/Makefile-src.am
@@ -9,7 +9,11 @@ gnome-talos-session-%.desktop: src/gnome-talos-session.desktop.in
 	    -e s,@TYPE\@,$(patsubst gnome-talos-session-%.desktop,%,$@), $< > $  tmp && mv $  tmp $@
 
 bin_PROGRAMS += gnome-talos-session
-gnome_talos_session_SOURCES = src/gnome-talos-session.c
+gnome_talos_session_SOURCES = src/gnome-talos-session.c \
+	src/gnome-talos-meminfo.c \
+	src/gnome-talos-meminfo.h \
+	src/gnome-talos-meta.c \
+	src/gnome-talos-meta.h
 gnome_talos_session_CPPFLAGS = $(GIO_UNIX_CFLAGS)
 gnome_talos_session_LDADD = $(GIO_UNIX_LIBS)
 
diff --git a/src/gnome-talos-meminfo.c b/src/gnome-talos-meminfo.c
new file mode 100644
index 0000000..42b1354
--- /dev/null
+++ b/src/gnome-talos-meminfo.c
@@ -0,0 +1,204 @@
+#include <gio/gio.h>
+#include <gio/gunixinputstream.h>
+
+#include <string.h>
+#include <stdio.h>
+
+typedef void (WalkProcCallback) (long pid, const char *prefix, gpointer user_data);
+
+static void
+walk_proc (WalkProcCallback callback, gpointer user_data)
+{
+  GFile *proc;
+  GFileEnumerator *iter;
+  GError *error = NULL;
+  GRegex *pid_regex;
+
+  pid_regex = g_regex_new ("[0-9]+", 0, 0, NULL);
+
+  proc = g_file_new_for_path ("/proc");
+
+  iter = g_file_enumerate_children (proc, "standard::*",
+				    G_FILE_QUERY_INFO_NONE,
+				    NULL,
+				    &error);
+  if (!iter)
+    g_error ("%s", error->message);
+
+  while (TRUE)
+    {
+      GFileInfo *fileinfo;
+      const char *name;
+      GMatchInfo *match;
+      char *fullpath;
+
+      fileinfo = g_file_enumerator_next_file (iter, NULL, &error);
+      if (error != NULL)
+	{
+	  g_clear_error (&error);
+	  continue;
+	}
+      if (!fileinfo)
+	break;
+
+      fullpath = g_build_filename ("/proc", g_file_info_get_name (fileinfo), NULL);
+
+      name = g_file_info_get_display_name (fileinfo);
+
+      if (g_regex_match (pid_regex, name, 0, &match))
+	{
+	  long pid = (long) g_ascii_strtoll (name, NULL, 10);
+	  callback (pid, fullpath, user_data);
+	}
+
+      g_free (fullpath);
+      g_object_unref (fileinfo);
+    }
+
+  g_object_unref (iter);
+  g_object_unref (proc);
+
+  g_regex_unref (pid_regex);
+}
+
+typedef struct {
+  GVariantBuilder *builder;
+} AcquireMemData; 
+
+static void
+proc_get_process_size (const char *proc_prefix,
+		       gulong     *vm_size,
+		       gulong     *rss_size)
+{
+  char *filename;
+  char *contents;
+  char *iter;
+  gsize len;
+  int i;
+
+  *vm_size = *rss_size = 0;
+
+  filename = g_build_filename (proc_prefix, "stat", NULL);
+
+  if (!g_file_get_contents (filename, &contents, &len, NULL))
+    goto out;
+
+  iter = contents;
+  /* See "man proc" for where this 22 comes from */
+  for (i = 0; i < 22; i++) {
+    iter = strchr (iter, ' ');
+    if (!iter)
+      goto out;
+    iter++;
+  }
+  sscanf (iter, " %lu", vm_size);
+  iter = strchr (iter, ' ');
+  if (iter)
+    sscanf (iter, " %lu", rss_size);
+
+ out:
+  g_free (contents);
+  g_free (filename);
+}
+
+static void
+proc_get_uidgid (const char *proc_prefix,
+		 gint32     *real_uid,
+		 gint32     *effective_uid,
+		 gint32     *real_gid,
+		 gint32     *effective_gid)
+{
+  char *filename;
+  char *contents;
+  char *uid;
+  char *gid;
+  gsize len;
+
+  filename = g_build_filename (proc_prefix, "status", NULL);
+
+  if (!g_file_get_contents (filename, &contents, &len, NULL))
+    goto out;
+
+  uid = strstr (contents, "\nUid:");
+  if (!uid)
+    goto out;
+  uid += 5;
+
+  *real_uid = (gint32) g_ascii_strtoll (uid, 
+					&uid,
+					10);
+
+  *effective_uid = (gint32) g_ascii_strtoll (uid, 
+					     NULL,
+					     10);
+  
+  gid = strstr (contents, "\nGid:");
+  if (!gid)
+    goto out;
+
+  *real_gid = (gint32) g_ascii_strtoll (gid, 
+					&gid,
+					10);
+
+  *effective_gid = (gint32) g_ascii_strtoll (gid, 
+					     &gid,
+					     10);
+  
+ out:
+  g_free (filename);
+}
+
+
+static void
+acquire_mem_iter (long          pid,
+		  const char   *proc_prefix,
+		  gpointer      user_data)
+{
+  AcquireMemData *data = user_data;
+  GVariantBuilder *builder = data->builder;
+  gulong vm_size;
+  gulong rss_size;
+  gint32 real_uid, effective_uid, real_gid, effective_gid;
+  
+  proc_get_process_size (proc_prefix, &vm_size, &rss_size); 
+
+  if (vm_size == 0 && rss_size == 0) /* Probably a kernel thread */
+    return;
+
+  proc_get_uidgid (proc_prefix, &real_uid, &effective_uid, &real_gid, &effective_gid);
+
+  g_variant_builder_open (builder, G_VARIANT_TYPE ("{uv}"));
+  g_variant_builder_add (builder, "u", (guint32)pid);
+
+  g_variant_builder_open (builder, G_VARIANT_TYPE_VARIANT);
+  g_variant_builder_open (builder, G_VARIANT_TYPE_ARRAY);
+
+  g_variant_builder_add (builder, "{sv}", "real-uid", g_variant_new_int32 (real_uid));
+  if (real_uid != effective_uid)
+    g_variant_builder_add (builder, "{sv}", "effective-uid", g_variant_new_int32 (effective_uid));
+  g_variant_builder_add (builder, "{sv}", "rss", g_variant_new_int64 (rss_size));
+  g_variant_builder_add (builder, "{sv}", "vm", g_variant_new_int64 (vm_size));
+
+  g_variant_builder_close (builder);
+  g_variant_builder_close (builder);
+  g_variant_builder_close (builder);
+}
+
+GVariant *
+gnome_talos_acquire_mem (void)
+{
+  GVariantBuilder builder;
+  AcquireMemData data;
+
+  g_variant_builder_init (&builder, G_VARIANT_TYPE ("(a{uv})"));
+  data.builder = &builder;
+
+  g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{uv}"));
+
+  walk_proc (acquire_mem_iter, &data);
+
+  g_variant_builder_close (&builder);
+
+  return g_variant_builder_end (&builder);
+}
+
diff --git a/src/gnome-talos-meminfo.h b/src/gnome-talos-meminfo.h
new file mode 100644
index 0000000..cbb297a
--- /dev/null
+++ b/src/gnome-talos-meminfo.h
@@ -0,0 +1,6 @@
+#ifndef __GNOME_TALOS_MEMINFO__
+#define __GNOME_TALOS_MEMINFO__ 1
+
+GVariant * gnome_talos_acquire_mem (void);
+
+#endif
diff --git a/src/gnome-talos-meta.c b/src/gnome-talos-meta.c
new file mode 100644
index 0000000..e9a888e
--- /dev/null
+++ b/src/gnome-talos-meta.c
@@ -0,0 +1,55 @@
+#include <gio/gio.h>
+
+#include <string.h>
+
+GVariant *
+gnome_talos_acquire_meta (void)
+{
+  GVariantBuilder builder;
+  GDBusConnection *system_bus;
+  GError *error = NULL;
+  char *checksum;
+  char *procdata;
+  gsize len;
+
+  system_bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error);
+  if (!system_bus)
+    g_error ("%s", error->message);
+ 
+  g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+
+  checksum = g_compute_checksum_for_string (G_CHECKSUM_SHA256,
+					    g_dbus_connection_get_guid (system_bus),
+					    -1);
+  g_variant_builder_add (&builder, "{sv}",
+			 "uuid",
+			 g_variant_new_string (checksum));
+  g_free (checksum);
+
+  g_variant_builder_add (&builder, "{sv}",
+			 "mypid",
+			 g_variant_new_int64 ((gint64)getpid ()));
+  g_variant_builder_add (&builder, "{sv}",
+			 "myuid",
+			 g_variant_new_int32 ((gint32)getuid ()));
+
+  if (g_file_get_contents ("/proc/meminfo", &procdata, &len, NULL))
+    {
+      const char *memtotal_str = strstr (procdata, "MemTotal:");
+
+      if (memtotal_str)
+	{
+	  guint64 memtotal;
+
+	  memtotal = g_ascii_strtoll (memtotal_str + strlen ("MemTotal:"), NULL, 10);
+
+	  memtotal *= 1024;
+
+	  g_variant_builder_add (&builder, "{sv}",
+				 "memtotal",
+				 g_variant_new_uint64 (memtotal));
+	}
+    }
+
+  return g_variant_builder_end (&builder);
+}
diff --git a/src/gnome-talos-meta.h b/src/gnome-talos-meta.h
new file mode 100644
index 0000000..64ea139
--- /dev/null
+++ b/src/gnome-talos-meta.h
@@ -0,0 +1,6 @@
+#ifndef __GNOME_TALOS_META__
+#define __GNOME_TALOS_META__ 1
+
+GVariant * gnome_talos_acquire_meta (void);
+
+#endif
diff --git a/src/gnome-talos-session.c b/src/gnome-talos-session.c
index 3a1b5cb..7bba9c5 100644
--- a/src/gnome-talos-session.c
+++ b/src/gnome-talos-session.c
@@ -1,206 +1,9 @@
 #include <gio/gio.h>
-#include <gio/gunixinputstream.h>
 
 #include <string.h>
-#include <stdio.h>
 
-typedef void (WalkProcCallback) (long pid, const char *prefix, gpointer user_data);
-
-static void
-walk_proc (WalkProcCallback callback, gpointer user_data)
-{
-  GFile *proc;
-  GFileEnumerator *iter;
-  GError *error = NULL;
-  GRegex *pid_regex;
-
-  pid_regex = g_regex_new ("[0-9]+", 0, 0, NULL);
-
-  proc = g_file_new_for_path ("/proc");
-
-  iter = g_file_enumerate_children (proc, "standard::*",
-				    G_FILE_QUERY_INFO_NONE,
-				    NULL,
-				    &error);
-  if (!iter)
-    g_error ("%s", error->message);
-
-  while (TRUE)
-    {
-      GFileInfo *fileinfo;
-      const char *name;
-      GMatchInfo *match;
-      char *fullpath;
-
-      fileinfo = g_file_enumerator_next_file (iter, NULL, &error);
-      if (error != NULL)
-	{
-	  g_clear_error (&error);
-	  continue;
-	}
-      if (!fileinfo)
-	break;
-
-      fullpath = g_build_filename ("/proc", g_file_info_get_name (fileinfo), NULL);
-
-      name = g_file_info_get_display_name (fileinfo);
-
-      if (g_regex_match (pid_regex, name, 0, &match))
-	{
-	  long pid = (long) g_ascii_strtoll (name, NULL, 10);
-	  callback (pid, fullpath, user_data);
-	}
-
-      g_free (fullpath);
-      g_object_unref (fileinfo);
-    }
-
-  g_object_unref (iter);
-  g_object_unref (proc);
-
-  g_regex_unref (pid_regex);
-}
-
-typedef struct {
-  GVariantBuilder *builder;
-} AcquireMemData; 
-
-static void
-proc_get_process_size (const char *proc_prefix,
-		       gulong     *vm_size,
-		       gulong     *rss_size)
-{
-  char *filename;
-  char *contents;
-  char *iter;
-  gsize len;
-  int i;
-
-  *vm_size = *rss_size = 0;
-
-  filename = g_build_filename (proc_prefix, "stat", NULL);
-
-  if (!g_file_get_contents (filename, &contents, &len, NULL))
-    goto out;
-
-  iter = contents;
-  /* See "man proc" for where this 22 comes from */
-  for (i = 0; i < 22; i++) {
-    iter = strchr (iter, ' ');
-    if (!iter)
-      goto out;
-    iter++;
-  }
-  sscanf (iter, " %lu", vm_size);
-  iter = strchr (iter, ' ');
-  if (iter)
-    sscanf (iter, " %lu", rss_size);
-
- out:
-  g_free (contents);
-  g_free (filename);
-}
-
-static void
-proc_get_uidgid (const char *proc_prefix,
-		 gint32     *real_uid,
-		 gint32     *effective_uid,
-		 gint32     *real_gid,
-		 gint32     *effective_gid)
-{
-  char *filename;
-  char *contents;
-  char *uid;
-  char *gid;
-  gsize len;
-
-  filename = g_build_filename (proc_prefix, "status", NULL);
-
-  if (!g_file_get_contents (filename, &contents, &len, NULL))
-    goto out;
-
-  uid = strstr (contents, "\nUid:");
-  if (!uid)
-    goto out;
-  uid += 5;
-
-  *real_uid = (gint32) g_ascii_strtoll (uid, 
-					&uid,
-					10);
-
-  *effective_uid = (gint32) g_ascii_strtoll (uid, 
-					     NULL,
-					     10);
-  
-  gid = strstr (contents, "\nGid:");
-  if (!gid)
-    goto out;
-
-  *real_gid = (gint32) g_ascii_strtoll (gid, 
-					&gid,
-					10);
-
-  *effective_gid = (gint32) g_ascii_strtoll (gid, 
-					     &gid,
-					     10);
-  
- out:
-  g_free (filename);
-}
-
-
-static void
-acquire_mem_iter (long          pid,
-		  const char   *proc_prefix,
-		  gpointer      user_data)
-{
-  AcquireMemData *data = user_data;
-  GVariantBuilder *builder = data->builder;
-  gulong vm_size;
-  gulong rss_size;
-  gint32 real_uid, effective_uid, real_gid, effective_gid;
-  
-  proc_get_process_size (proc_prefix, &vm_size, &rss_size); 
-
-  if (vm_size == 0 && rss_size == 0) /* Probably a kernel thread */
-    return;
-
-  proc_get_uidgid (proc_prefix, &real_uid, &effective_uid, &real_gid, &effective_gid);
-
-  g_variant_builder_open (builder, G_VARIANT_TYPE ("{uv}"));
-  g_variant_builder_add (builder, "u", (guint32)pid);
-
-  g_variant_builder_open (builder, G_VARIANT_TYPE_VARIANT);
-  g_variant_builder_open (builder, G_VARIANT_TYPE_ARRAY);
-
-  g_variant_builder_add (builder, "{sv}", "real-uid", g_variant_new_int32 (real_uid));
-  if (real_uid != effective_uid)
-    g_variant_builder_add (builder, "{sv}", "effective-uid", g_variant_new_int32 (effective_uid));
-  g_variant_builder_add (builder, "{sv}", "rss", g_variant_new_int64 (rss_size));
-  g_variant_builder_add (builder, "{sv}", "vm", g_variant_new_int64 (vm_size));
-
-  g_variant_builder_close (builder);
-  g_variant_builder_close (builder);
-  g_variant_builder_close (builder);
-}
-
-GVariant *
-acquire_mem (void)
-{
-  GVariantBuilder builder;
-  AcquireMemData data;
-
-  g_variant_builder_init (&builder, G_VARIANT_TYPE ("(a{uv})"));
-  data.builder = &builder;
-
-  g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{uv}"));
-
-  walk_proc (acquire_mem_iter, &data);
-
-  g_variant_builder_close (&builder);
-
-  return g_variant_builder_end (&builder);
-}
+#include "gnome-talos-meminfo.h"
+#include "gnome-talos-meta.h"
 
 GVariant *
 gather_snapshot (void)
@@ -212,7 +15,7 @@ gather_snapshot (void)
 
   start_timestamp = g_get_monotonic_time ();
 
-  mem_data = acquire_mem ();
+  mem_data = gnome_talos_acquire_mem ();
 
   end_timestamp = g_get_monotonic_time ();
 
@@ -240,58 +43,6 @@ gather_snapshot (void)
   return data;
 }
 
-GVariant *
-get_system_info (void)
-{
-  GVariantBuilder builder;
-  GDBusConnection *system_bus;
-  GError *error = NULL;
-  char *checksum;
-  char *procdata;
-  gsize len;
-
-  system_bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error);
-  if (!system_bus)
-    g_error ("%s", error->message);
- 
-  g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
-
-  checksum = g_compute_checksum_for_string (G_CHECKSUM_SHA256,
-					    g_dbus_connection_get_guid (system_bus),
-					    -1);
-  g_variant_builder_add (&builder, "{sv}",
-			 "uuid",
-			 g_variant_new_string (checksum));
-  g_free (checksum);
-
-  g_variant_builder_add (&builder, "{sv}",
-			 "mypid",
-			 g_variant_new_int64 ((gint64)getpid ()));
-  g_variant_builder_add (&builder, "{sv}",
-			 "myuid",
-			 g_variant_new_int32 ((gint32)getuid ()));
-
-  if (g_file_get_contents ("/proc/meminfo", &procdata, &len, NULL))
-    {
-      const char *memtotal_str = strstr (procdata, "MemTotal:");
-
-      if (memtotal_str)
-	{
-	  guint64 memtotal;
-
-	  memtotal = g_ascii_strtoll (memtotal_str + strlen ("MemTotal:"), NULL, 10);
-
-	  memtotal *= 1024;
-
-	  g_variant_builder_add (&builder, "{sv}",
-				 "memtotal",
-				 g_variant_new_uint64 (memtotal));
-	}
-    }
-
-  return g_variant_builder_end (&builder);
-}
-
 static void
 print_variant (GVariant *variant)
 {
@@ -324,7 +75,7 @@ main (int    argc,
 
   g_type_init ();
 
-  sysinfo = get_system_info ();
+  sysinfo = gnome_talos_acquire_meta ();
   print_variant (sysinfo);
   g_variant_unref (sysinfo);
 



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