summary refs log tree commit diff stats
path: root/plugins/sysinfo/shared
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/sysinfo/shared')
-rw-r--r--plugins/sysinfo/shared/df.c53
-rw-r--r--plugins/sysinfo/shared/df.h23
2 files changed, 76 insertions, 0 deletions
diff --git a/plugins/sysinfo/shared/df.c b/plugins/sysinfo/shared/df.c
new file mode 100644
index 00000000..2ef75689
--- /dev/null
+++ b/plugins/sysinfo/shared/df.c
@@ -0,0 +1,53 @@
+/*
+ * 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; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * 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
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <glib.h>
+
+#include "sysinfo.h"
+
+int xs_parse_df(gint64 *out_total, gint64 *out_free)
+{
+	FILE *pipe;
+	char buffer[bsize];
+	
+	pipe = popen("df -k -l -P", "r");
+	if(pipe==NULL)
+		return 1;
+
+	*out_total = *out_free = 0;
+
+	while(fgets(buffer, bsize, pipe) != NULL)
+	{
+		long long int avail, total;
+
+		/* Filesystem 1024-blocks Used Available Capacity Mounted-on */
+		if (sscanf (buffer, "%*s %lld %*lld %lld %*s %*s", &total, &avail) == 2)
+		{
+			*out_total += total;
+			*out_free += avail;
+		}
+	}
+
+	/* Convert to bytes */
+	*out_total *= 1000;
+	*out_free *= 1000;
+
+	pclose(pipe);
+	return 0;
+}
diff --git a/plugins/sysinfo/shared/df.h b/plugins/sysinfo/shared/df.h
new file mode 100644
index 00000000..5f7f3296
--- /dev/null
+++ b/plugins/sysinfo/shared/df.h
@@ -0,0 +1,23 @@
+/*
+ * 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; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * 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
+ */
+
+
+#ifndef SYSINFO_SHARED_H
+#define SYSINFO_SHARED_H
+
+int xs_parse_df(gint64 *total_bytes, gint64 *free_bytes);
+
+#endif