diff options
Diffstat (limited to 'arch/linux/common/os.h')
-rw-r--r-- | arch/linux/common/os.h | 57 |
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); |