aboutsummaryrefslogtreecommitdiff
path: root/packages/patches/hard-code_default_user-install_paths-0.42.4.patch
blob: c9abc0467332996a612bc65b7f5357358db85b75 (plain)
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
--- branches/pd-extended/0.41/pd/src/s_path.c	2009/04/09 01:04:16	10990
+++ branches/pd-extended/0.41/pd/src/s_path.c	2009/04/09 01:29:24	10991
@@ -229,8 +229,29 @@
 
 void sys_setextrapath(const char *p)
 {
+    char pathbuf[FILENAME_MAX];
     namelist_free(pd_extrapath);
-    pd_extrapath = namelist_append(0, p, 0);
+    /* add standard place for users to install stuff first */
+#ifdef __gnu_linux__
+    sys_expandpath("~/pd-externals", pathbuf);
+    pd_extrapath = namelist_append(0, pathbuf, 0);
+    pd_extrapath = namelist_append(pd_extrapath, "/usr/local/lib/pd-externals", 0);
+#endif
+
+#ifdef __APPLE__
+    sys_expandpath("~/Library/Pd", pathbuf);
+    pd_extrapath = namelist_append(0, pathbuf, 0);
+    pd_extrapath = namelist_append(pd_extrapath, "/Library/Pd", 0);
+#endif
+
+#ifdef _WIN32
+    sys_expandpath("%ProgramFiles%/Common Files/Pd", pathbuf);
+    pd_extrapath = namelist_append(0, pathbuf, 0);
+    sys_expandpath("%UserProfile%/Application Data/Pd", pathbuf);
+    pd_extrapath = namelist_append(pd_extrapath, pathbuf, 0);
+#endif
+    /* add built-in "extra" path last so its checked last */
+    pd_extrapath = namelist_append(pd_extrapath, p, 0);
 }
 
 #ifdef MSW
@@ -357,11 +378,12 @@
             dirresult, nameresult, size, bin)) >= 0)
                 return (fd);
 
-        /* next look in "extra" */
-    if (sys_usestdpath &&
-        (fd = sys_trytoopenone(pd_extrapath->nl_string, name, ext,
-            dirresult, nameresult, size, bin)) >= 0)
-                return (fd);
+        /* next look in built-in paths like "extra" */
+    if (sys_usestdpath)
+        for (nl = pd_extrapath; nl; nl = nl->nl_next)
+            if ((fd = sys_trytoopenone(nl->nl_string, name, ext,
+                dirresult, nameresult, size, bin)) >= 0)
+                    return (fd);
 
     *dirresult = 0;
     *nameresult = dirresult;