summaryrefslogtreecommitdiff
path: root/user/i3status/glob_tilde.patch
blob: b1f2ba667991b2a438b753e70b8b6b486a376df3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
diff --git i/i3status.c w/i3status.c
index 5088c96..3c18214 100644
--- i/i3status.c
+++ w/i3status.c
@@ -210,29 +210,19 @@ static int valid_color(const char *value) {
  *
  */
 static char *resolve_tilde(const char *path) {
-    static glob_t globbuf;
-    char *head, *tail, *result = NULL;
-
-    tail = strchr(path, '/');
-    head = strndup(path, tail ? (size_t)(tail - path) : strlen(path));
-
-    int res = glob(head, GLOB_TILDE, NULL, &globbuf);
-    free(head);
-    /* no match, or many wildcard matches are bad */
-    if (res == GLOB_NOMATCH || globbuf.gl_pathc != 1)
-        result = sstrdup(path);
-    else if (res != 0) {
-        die("glob() failed");
-    } else {
-        head = globbuf.gl_pathv[0];
-        result = scalloc(strlen(head) + (tail ? strlen(tail) : 0) + 1);
-        strncpy(result, head, strlen(head));
-        if (tail)
-            strncat(result, tail, strlen(tail));
+    char *home, *result = NULL;
+
+    if (strncmp(path, "~/", 2) == 0) {
+        home = getenv("HOME");
+        if (home != NULL) {
+            result = scalloc(strlen(home) + strlen(path));
+            strcpy(result, home);
+            strcat(result, path+1);
+            return result;
+        }
     }
-    globfree(&globbuf);
 
-    return result;
+    return sstrdup(path);
 }
 
 static char *get_config_path(void) {
diff --git i/include/i3status.h w/include/i3status.h
index 9ac471d..27ecae4 100644
--- i/include/i3status.h
+++ w/include/i3status.h
@@ -236,4 +236,9 @@ extern cfg_t *cfg, *cfg_general, *cfg_section;
 extern void **cur_instance;
 
 extern pthread_t main_thread;
+
+#ifndef GLOB_TILDE
+#define GLOB_TILDE 0
+#endif
+
 #endif