diff options
Diffstat (limited to 'src/util.c')
-rw-r--r-- | src/util.c | 46 |
1 files changed, 46 insertions, 0 deletions
@@ -1,4 +1,7 @@ #include "util.h" +#include <stdio.h> +#include <string.h> +#include <stdlib.h> #include <glib.h> gpointer @@ -16,3 +19,46 @@ cmumble_find_by_id(GList *list, gsize member_offset, guint id) return el; } + +gchar * +cmumble_get_os_name(void) +{ + FILE *f; + char *line = NULL; + char *os = NULL, *value, *end; + size_t key_len = strlen("PRETTY_NAME="); + size_t n; + + f = fopen("/etc/os-release", "r"); + if (f == NULL) + return NULL; + + while (getline(&line, &n, f) != -1) { + if (strncmp("PRETTY_NAME=", line, key_len) == 0 && (n - key_len) > 1) { + value = &line[key_len]; + if (strlen(value) == 0) + continue; + + end = &value[strlen(value) - 1]; + if (*end == '\n') + *end-- = '\0'; + + if (strlen(value) < 2) + continue; + + if (value[0] == '"') + value++; + + if (*end == '"') + *end = '\0'; + + os = strdup(value); + goto out; + } + } + +out: + free(line); + fclose(f); + return os; +} |