aboutsummaryrefslogtreecommitdiff
path: root/modules/computer
diff options
context:
space:
mode:
authorSimon Quigley <tsimonq2@ubuntu.com>2017-11-25 13:35:47 -0600
committerSimon Quigley <tsimonq2@ubuntu.com>2017-11-25 13:35:47 -0600
commit11e616945340e87a1f567ab92e6dfac3068875b1 (patch)
tree451c1385230f29d3f4deef777b41609bed6e8090 /modules/computer
parent9a9db98089717990cd5e0eef529f6bb0819ebe46 (diff)
New upstream version 0.5.1+git20171103
Diffstat (limited to 'modules/computer')
-rw-r--r--modules/computer/boots.c58
-rw-r--r--modules/computer/display.c83
-rw-r--r--modules/computer/uptime.c1
3 files changed, 73 insertions, 69 deletions
diff --git a/modules/computer/boots.c b/modules/computer/boots.c
index d8a6d32a..ba458242 100644
--- a/modules/computer/boots.c
+++ b/modules/computer/boots.c
@@ -24,43 +24,43 @@
void
scan_boots_real(void)
{
- FILE *last;
- char buffer[256];
+ gchar **tmp;
+ gboolean spawned;
+ gchar *out, *err, *p, *s, *next_nl;
scan_os(FALSE);
if (!computer->os->boots)
- computer->os->boots = g_strdup_printf("[%s]\n", _("Boots"));
+ computer->os->boots = strdup("");
else
return;
- last = popen("last", "r");
- if (last) {
- while (fgets(buffer, 256, last)) {
- if (strstr(buffer, "system boot")) {
- gchar **tmp, *buf = buffer;
-
- strend(buffer, '\n');
-
- while (*buf) {
- if (*buf == ' ' && *(buf + 1) == ' ') {
- memmove(buf, buf + 1, strlen(buf) + 1);
-
- buf--;
- } else {
- buf++;
+ spawned = g_spawn_command_line_sync("last",
+ &out, &err, NULL, NULL);
+ if (spawned && out != NULL) {
+ p = out;
+ while(next_nl = strchr(p, '\n')) {
+ strend(p, '\n');
+ if (strstr(p, "system boot")) {
+ s = p;
+ while (*s) {
+ if (*s == ' ' && *(s + 1) == ' ') {
+ memmove(s, s + 1, strlen(s) + 1);
+ s--;
+ } else {
+ s++;
+ }
+ }
+ tmp = g_strsplit(p, " ", 0);
+ computer->os->boots =
+ h_strdup_cprintf("\n%s %s %s %s=%s",
+ computer->os->boots,
+ tmp[4], tmp[5], tmp[6], tmp[7], tmp[3]);
+ g_strfreev(tmp);
}
- }
-
- tmp = g_strsplit(buffer, " ", 0);
- computer->os->boots =
- h_strdup_cprintf("\n%s %s %s %s=%s|%s",
- computer->os->boots,
- tmp[4], tmp[5], tmp[6], tmp[7], tmp[3], tmp[8]);
- g_strfreev(tmp);
+ p = next_nl + 1;
}
- }
-
- pclose(last);
+ g_free(out);
+ g_free(err);
}
}
diff --git a/modules/computer/display.c b/modules/computer/display.c
index 2c98b144..61eac4eb 100644
--- a/modules/computer/display.c
+++ b/modules/computer/display.c
@@ -26,38 +26,39 @@ get_glx_info(DisplayInfo *di)
{
gchar *output;
if (g_spawn_command_line_sync("glxinfo", &output, NULL, NULL, NULL)) {
- gchar **output_lines;
- gint i = 0;
+ gchar **output_lines;
+ gint i = 0;
- for (output_lines = g_strsplit(output, "\n", 0);
- output_lines && output_lines[i];
- i++) {
- if (strstr(output_lines[i], "OpenGL")) {
- gchar **tmp = g_strsplit(output_lines[i], ":", 0);
+ for (output_lines = g_strsplit(output, "\n", 0);
+ output_lines && output_lines[i];
+ i++) {
+ if (strstr(output_lines[i], "OpenGL")) {
+ gchar **tmp = g_strsplit(output_lines[i], ":", 0);
- tmp[1] = g_strchug(tmp[1]);
+ tmp[1] = g_strchug(tmp[1]);
- get_str("OpenGL vendor str", di->ogl_vendor);
- get_str("OpenGL renderer str", di->ogl_renderer);
- get_str("OpenGL version str", di->ogl_version);
+ get_str("OpenGL vendor str", di->ogl_vendor);
+ get_str("OpenGL renderer str", di->ogl_renderer);
+ get_str("OpenGL version str", di->ogl_version);
- g_strfreev(tmp);
- } else if (strstr(output_lines[i], "direct rendering: Yes")) {
- di->dri = TRUE;
- }
- }
+ g_strfreev(tmp);
+ } else if (strstr(output_lines[i], "direct rendering: Yes")) {
+ di->dri = TRUE;
+ }
+ }
+
+ g_free(output);
+ g_strfreev(output_lines);
+
+ if (!di->ogl_vendor)
+ di->ogl_vendor = _("(Unknown)");
+ if (!di->ogl_renderer)
+ di->ogl_renderer = _("(Unknown)");
+ if (!di->ogl_version)
+ di->ogl_version = _("(Unknown)");
- g_free(output);
- g_strfreev(output_lines);
-
- if (!di->ogl_vendor)
- di->ogl_vendor = "Unknown";
- if (!di->ogl_renderer)
- di->ogl_renderer = "Unknown";
- if (!di->ogl_version)
- di->ogl_version = "Unknown";
} else {
- di->ogl_vendor = di->ogl_renderer = di->ogl_version = "Unknown";
+ di->ogl_vendor = di->ogl_renderer = di->ogl_version = _("(Unknown)");
}
}
@@ -66,7 +67,7 @@ static void
get_x11_info(DisplayInfo *di)
{
gchar *output;
-
+
if (g_spawn_command_line_sync("xdpyinfo", &output, NULL, NULL, NULL)) {
gchar **output_lines, **old;
@@ -74,8 +75,9 @@ get_x11_info(DisplayInfo *di)
g_free(output);
old = output_lines;
- while (*(output_lines++)) {
- gchar **tmp = g_strsplit(*output_lines, ":", 0);
+ while (*output_lines) {
+ gchar **tmp = g_strsplit(*output_lines, ":", 2);
+ output_lines++;
if (tmp[1] && tmp[0]) {
tmp[1] = g_strchug(tmp[1]);
@@ -83,20 +85,21 @@ get_x11_info(DisplayInfo *di)
get_str("vendor string", di->vendor);
get_str("X.Org version", di->version);
get_str("XFree86 version", di->version);
+ get_str("name of display", di->display_name);
if (g_str_has_prefix(tmp[0], "number of extensions")) {
int n;
-
+
di->extensions = g_strdup("");
-
+
for (n = atoi(tmp[1]); n; n--) {
- di->extensions = h_strconcat(di->extensions,
+ di->extensions = h_strconcat(di->extensions,
g_strstrip(*(++output_lines)),
"=\n",
NULL);
}
g_strfreev(tmp);
-
+
break;
}
}
@@ -106,19 +109,19 @@ get_x11_info(DisplayInfo *di)
g_strfreev(old);
}
-
+
GdkScreen *screen = gdk_screen_get_default();
-
+
if (screen && GDK_IS_SCREEN(screen)) {
gint n_monitors = gdk_screen_get_n_monitors(screen);
gint i;
-
+
di->monitors = NULL;
for (i = 0; i < n_monitors; i++) {
GdkRectangle rect;
-
+
gdk_screen_get_monitor_geometry(screen, i, &rect);
-
+
di->monitors = h_strdup_cprintf(_("Monitor %d=%dx%d pixels\n"),
di->monitors, i, rect.width, rect.height);
}
@@ -131,9 +134,9 @@ DisplayInfo *
computer_get_display(void)
{
DisplayInfo *di = g_new0(DisplayInfo, 1);
-
+
GdkScreen *screen = gdk_screen_get_default();
-
+
if (screen && GDK_IS_SCREEN(screen)) {
di->width = gdk_screen_get_width(screen);
di->height = gdk_screen_get_height(screen);
diff --git a/modules/computer/uptime.c b/modules/computer/uptime.c
index 5f0f1942..6ef3d250 100644
--- a/modules/computer/uptime.c
+++ b/modules/computer/uptime.c
@@ -30,6 +30,7 @@ computer_get_uptime(void)
ui->minutes = minutes / 60;
fclose(procuptime);
} else {
+ g_free(ui);
return NULL;
}