From 6259b0301bbdf10c8337be35d440f6f1521ee2b0 Mon Sep 17 00:00:00 2001 From: Danilo Cesar Lemes de Paula Date: Fri, 25 Oct 2013 23:56:27 +0000 Subject: fix device probing for UEMIS computer on linux When the device probing was ported from the Gtk version we skipped the UEMIS code. It's still based on the contents of /proc/mounts, although without the use of glib's helpers. Signed-off-by: Danilo Cesar Lemes de Paula --- linux.c | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) (limited to 'linux.c') diff --git a/linux.c b/linux.c index 93481953f..5006ca011 100644 --- a/linux.c +++ b/linux.c @@ -37,6 +37,10 @@ int enumerate_devices (device_callback_t callback, void *userdata) "rfcomm*", NULL }; + FILE *file; + char *line = NULL; + char *fname; + size_t len; dp = opendir (dirname); if (dp == NULL) { @@ -59,8 +63,37 @@ int enumerate_devices (device_callback_t callback, void *userdata) } } } - // TODO: list UEMIS mount point from /proc/mounts - closedir (dp); + + file = fopen("/proc/mounts", "r"); + if (file == NULL) + return index; + + while ((getline(&line, &len, file)) != -1) { + char *ptr = strstr(line, "UEMISSDA"); + if (ptr) { + char *end = ptr, *start = ptr; + while (start > line && *start != ' ') + start--; + if (*start == ' ') + start++; + while (*end != ' ' && *end != '\0') + end++; + + *end = '\0'; + fname = strdup(start); + + callback(fname, userdata); + + if (is_default_dive_computer_device(fname)) + index = i; + i++; + free((void *)fname); + } + } + + free(line); + fclose(file); + return index; } -- cgit v1.2.3-70-g09d2