summaryrefslogtreecommitdiff
path: root/arch/linux/common/devmemory.h
diff options
context:
space:
mode:
Diffstat (limited to 'arch/linux/common/devmemory.h')
-rw-r--r--arch/linux/common/devmemory.h99
1 files changed, 99 insertions, 0 deletions
diff --git a/arch/linux/common/devmemory.h b/arch/linux/common/devmemory.h
new file mode 100644
index 00000000..780ab12f
--- /dev/null
+++ b/arch/linux/common/devmemory.h
@@ -0,0 +1,99 @@
+/*
+ * HardInfo - Displays System Information
+ * Copyright (C) 2003-2007 Leandro A. F. Pereira <leandro@linuxmag.com.br>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 2.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+static GHashTable *memlabels;
+
+static void __scan_memory()
+{
+ gchar **keys, *tmp;
+ static gint offset = -1;
+ gint i;
+
+ if (offset == -1) {
+ /* gah. linux 2.4 adds three lines of data we don't need in
+ /proc/meminfo */
+ offset = strstr(idle_free(module_call_method("computer::getOSKernel")),
+ "Linux 2.4") ? 3 : 0;
+ }
+
+ g_file_get_contents("/proc/meminfo", &meminfo, NULL, NULL);
+
+ keys = g_strsplit(meminfo, "\n", 0);
+
+ g_free(meminfo);
+ g_free(lginterval);
+
+ meminfo = g_strdup("");
+ lginterval = g_strdup("");
+
+ for (i = offset; keys[i]; i++) {
+ gchar **newkeys = g_strsplit(keys[i], ":", 0);
+
+ if (!newkeys[0]) {
+ g_strfreev(newkeys);
+ break;
+ }
+
+ g_strstrip(newkeys[1]);
+
+ if ((tmp = g_hash_table_lookup(memlabels, newkeys[0]))) {
+ g_free(newkeys[0]);
+ newkeys[0] = g_strdup(tmp);
+ }
+
+ g_hash_table_replace(moreinfo, g_strdup(newkeys[0]), g_strdup(newkeys[1]));
+
+ tmp = g_strconcat(meminfo, newkeys[0], "=", newkeys[1], "\n", NULL);
+ g_free(meminfo);
+ meminfo = tmp;
+
+ tmp = g_strconcat(lginterval,
+ "UpdateInterval$", newkeys[0], "=1000\n", NULL);
+ g_free(lginterval);
+ lginterval = tmp;
+
+ g_strfreev(newkeys);
+ }
+ g_strfreev(keys);
+}
+
+static void __init_memory_labels(void)
+{
+ static struct {
+ char *proc_label;
+ char *real_label;
+ } proc2real[] = {
+ { "MemTotal", "Total Memory" },
+ { "MemFree", "Free Memory" },
+ { "SwapCached", "Cached Swap" },
+ { "HighTotal", "High Memory" },
+ { "HighFree", "Free High Memory" },
+ { "LowTotal", "Low Memory" },
+ { "LowFree", "Free Low Memory" },
+ { "SwapTotal", "Virtual Memory" },
+ { "SwapFree", "Free Virtual Memory" },
+ { NULL },
+ };
+ gint i;
+
+ memlabels = g_hash_table_new(g_str_hash, g_str_equal);
+
+ for (i = 0; proc2real[i].proc_label; i++) {
+ g_hash_table_insert(memlabels, proc2real[i].proc_label, proc2real[i].real_label);
+ }
+}