- time_t tm;
- size_t bufsize = 64;
- char *buf = malloc(bufsize);
-
- /* get time in format */
- time(&tm);
- setlocale(LC_TIME, "");
- if(!strftime(buf, bufsize, timeformat, localtime(&tm))) {
- setlocale(LC_TIME, "C");
- fprintf(stderr, "Strftime failed.\n");
- return smprintf("n/a");
- }
-
- setlocale(LC_TIME, "C");
- /* return time */
- return smprintf("%s", buf);
+ int perc;
+ long total, free, buffers, cached;
+ FILE *fp = fopen("/proc/meminfo", "r");
+
+ if (fp == NULL) {
+ warn("Error opening meminfo file");
+ return smprintf(UNKNOWN_STR);
+ }
+
+ fscanf(fp, "MemTotal: %ld kB\n", &total);
+ fscanf(fp, "MemFree: %ld kB\n", &free);
+ fscanf(fp, "MemAvailable: %ld kB\nBuffers: %ld kB\n", &buffers, &buffers);
+ fscanf(fp, "Cached: %ld kB\n", &cached);
+
+ fclose(fp);
+ perc = 100 * ((total - free) - (buffers + cached)) / total;
+
+ return smprintf("%d%%", perc);
+}
+
+static char *
+ram_total(void)
+{
+ long total;
+ FILE *fp = fopen("/proc/meminfo", "r");
+
+ if (fp == NULL) {
+ warn("Error opening meminfo file");
+ return smprintf(UNKNOWN_STR);
+ }
+
+ fscanf(fp, "MemTotal: %ld kB\n", &total);
+ fclose(fp);
+
+ return smprintf("%f", (float)total / 1024 / 1024);
+}
+
+static char *
+ram_used(void)
+{
+ long free, total, buffers, cached, used;
+ FILE *fp = fopen("/proc/meminfo", "r");
+
+ if (fp == NULL) {
+ warn("Error opening meminfo file");
+ return smprintf(UNKNOWN_STR);
+ }
+
+ fscanf(fp, "MemTotal: %ld kB\n", &total);
+ fscanf(fp, "MemFree: %ld kB\n", &free);
+ fscanf(fp, "MemAvailable: %ld kB\nBuffers: %ld kB\n", &buffers, &buffers);
+ fscanf(fp, "Cached: %ld kB\n", &cached);
+
+ fclose(fp);
+ used = total - free - buffers - cached;
+
+ return smprintf("%f", (float)used / 1024 / 1024);
+}
+
+static char *
+run_command(const char* command)
+{
+ FILE *fp = popen(command, "r");
+ char buffer[64] = '\0';
+
+ if (fp == NULL) {
+ warn("Could not get command output for: %s", command);
+ return smprintf(UNKNOWN_STR);
+ }
+
+ fgets(buffer, sizeof(buffer), fp);
+ buffer[sizeof(buffer)-1] = '\0';
+
+ pclose(fp);
+ return smprintf("%s", buffer);