aboutsummaryrefslogtreecommitdiff
path: root/arch/linux/common/os.h
diff options
context:
space:
mode:
Diffstat (limited to 'arch/linux/common/os.h')
-rw-r--r--arch/linux/common/os.h57
1 files changed, 42 insertions, 15 deletions
diff --git a/arch/linux/common/os.h b/arch/linux/common/os.h
index e4f35e95..01853123 100644
--- a/arch/linux/common/os.h
+++ b/arch/linux/common/os.h
@@ -1,6 +1,6 @@
/*
* HardInfo - Displays System Information
- * Copyright (C) 2003-2006 Leandro A. F. Pereira <leandro@linuxmag.com.br>
+ * Copyright (C) 2003-2006 Leandro A. F. Pereira <leandro@hardinfo.org>
*
* 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
@@ -17,6 +17,34 @@
*/
static gchar *
+get_default_gcc_version(void)
+{
+ char *buf;
+
+ if (g_spawn_command_line_sync("gcc -v",
+ NULL,
+ &buf,
+ NULL,
+ NULL)) {
+ char *return_value;
+
+ if (!(return_value = strstr(buf, "gcc version "))) {
+ goto err;
+ }
+
+ return_value += sizeof("gcc version");
+ return_value = g_strdup_printf("GNU C Compiler version %s", return_value);
+
+ g_free(buf);
+
+ return return_value;
+ }
+
+err:
+ return g_strdup("Unknown");
+}
+
+static gchar *
get_libc_version(void)
{
FILE *libc;
@@ -66,27 +94,23 @@ detect_desktop_environment(OperatingSystem * os)
{
const gchar *tmp = g_getenv("GNOME_DESKTOP_SESSION_ID");
FILE *version;
- int maj, min;
+ char vers[16];
if (tmp) {
/* FIXME: this might not be true, as the gnome-panel in path
may not be the one that's running.
see where the user's running panel is and run *that* to
obtain the version. */
- version = popen("gnome-panel --version", "r");
+ version = popen("gnome-about --gnome-version", "r");
if (version) {
- char gnome[10];
-
- fscanf(version, "%s gnome-panel %d.%d", gnome, &maj, &min);
+ fscanf(version, "Version: %s", vers);
if (pclose(version))
goto unknown;
} else {
goto unknown;
}
- os->desktop =
- g_strdup_printf("GNOME %d.%d (session name: %s)", maj, min,
- tmp);
+ os->desktop = g_strdup_printf("GNOME %s", vers);
} else if (g_getenv("KDE_FULL_SESSION")) {
version = popen("kcontrol --version", "r");
if (version) {
@@ -94,14 +118,14 @@ detect_desktop_environment(OperatingSystem * os)
fgets(buf, 32, version);
- fscanf(version, "KDE: %d.%d", &maj, &min);
+ fscanf(version, "KDE: %s", vers);
if (pclose(version))
goto unknown;
} else {
goto unknown;
}
- os->desktop = g_strdup_printf("KDE %d.%d", maj, min);
+ os->desktop = g_strdup_printf("KDE %s", vers);
} else {
unknown:
if (!g_getenv("DISPLAY")) {
@@ -147,11 +171,13 @@ computer_get_os(void)
gchar buffer[128];
release = popen("lsb_release -d", "r");
- fgets(buffer, 128, release);
- pclose(release);
+ if (release) {
+ fgets(buffer, 128, release);
+ pclose(release);
- os->distro = buffer;
- os->distro = g_strdup(os->distro + strlen("Description:\t"));
+ os->distro = buffer;
+ os->distro = g_strdup(os->distro + strlen("Description:\t"));
+ }
}
for (i = 0;; i++) {
@@ -210,6 +236,7 @@ computer_get_os(void)
os->username = g_strdup_printf("%s (%s)",
g_get_user_name(), g_get_real_name());
os->libc = get_libc_version();
+ os->gcc = get_default_gcc_version();
scan_languages(os);
detect_desktop_environment(os);