From b187a34ad9bc81921d24010e398c97b9501650e4 Mon Sep 17 00:00:00 2001 From: Benjamin Franzke Date: Wed, 4 Dec 2013 12:10:37 +0100 Subject: Get OS name from /etc/os-release --- src/cmumble.c | 3 ++- src/util.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ src/util.h | 3 +++ 3 files changed, 51 insertions(+), 1 deletion(-) diff --git a/src/cmumble.c b/src/cmumble.c index ca8830f..0246789 100644 --- a/src/cmumble.c +++ b/src/cmumble.c @@ -292,8 +292,9 @@ cmumble_protocol_init(struct cmumble *cm) cmumble_init_version(&version); version.version = 0x010203; version.release = PACKAGE_STRING; - version.os = "Gentoo/Linux"; + version.os = cmumble_get_os_name(); cmumble_send_version(cm, &version); + g_free(version.os); cmumble_init_authenticate(&authenticate); authenticate.username = (char *) cm->user_name; diff --git a/src/util.c b/src/util.c index b2549af..1f6fd41 100644 --- a/src/util.c +++ b/src/util.c @@ -1,4 +1,7 @@ #include "util.h" +#include +#include +#include #include 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; +} diff --git a/src/util.h b/src/util.h index 6019fe5..e2d58c6 100644 --- a/src/util.h +++ b/src/util.h @@ -7,6 +7,9 @@ gpointer cmumble_find_by_id(GList *list, gsize member_offset, guint id); +char * +cmumble_get_os_name(void); + static inline struct cmumble_user * find_user(struct cmumble *cm, uint32_t session_id) { -- cgit