aboutsummaryrefslogtreecommitdiff
path: root/modules/computer
diff options
context:
space:
mode:
authorLeandro Pereira <leandro@hardinfo.org>2018-05-16 06:50:56 -0700
committerLeandro Pereira <leandro@hardinfo.org>2018-05-16 06:50:56 -0700
commit6dfda529f4bde07cdda52a62c30eeda4cdd9eb17 (patch)
tree21008a3b098f9ccfff02a9ad0ad5ed5e6b093663 /modules/computer
parentc45ec053dc97d30922a6c19c8fc8aec30b294a11 (diff)
Parse /usr/lib/os-release while detecting distribution
Diffstat (limited to 'modules/computer')
-rw-r--r--modules/computer/os.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/modules/computer/os.c b/modules/computer/os.c
index a8886f64..aec53df2 100644
--- a/modules/computer/os.c
+++ b/modules/computer/os.c
@@ -282,6 +282,33 @@ computer_get_language(void)
}
static gchar *
+parse_os_release(void)
+{
+ gchar *pretty_name = NULL;
+ gchar **split, *contents, *line;
+
+ if (!g_file_get_contents("/usr/lib/os-release", &contents, NULL, NULL))
+ return NULL;
+
+ split = g_strsplit(idle_free(contents), "\n", 0);
+ if (!split)
+ return NULL;
+
+ for (line = *split; *line; line++) {
+ if (!strncmp(line, "PRETTY_NAME=", sizeof("PRETTY_NAME=") - 1)) {
+ pretty_name = g_strdup(line +
+ strlen("PRETTY_NAME=") + 1);
+ strend(pretty_name, '"');
+ break;
+ }
+ }
+
+ g_strfreev(split);
+
+ return pretty_name;
+}
+
+static gchar *
detect_distro(void)
{
static const struct {
@@ -327,6 +354,12 @@ detect_distro(void)
gchar *contents;
int i;
+ if (g_file_test("/usr/lib/os-release", G_FILE_TEST_EXISTS)) {
+ contents = parse_os_release();
+ if (contents)
+ return contents;
+ }
+
if (g_spawn_command_line_sync("lsb_release -d", &contents, NULL, NULL, NULL)) {
gchar *tmp = strstr(idle_free(contents), "Description:\t");