unofficial mirror of bug-guix@gnu.org 
 help / color / mirror / code / Atom feed
blob aa870d92123c2685e13c4961ecef8d59e01c29f9 2092 bytes (raw)
name: gnu/packages/patches/nautilus-extension-search-path.patch 	 # note: path name is non-authoritative(*)

 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
60
61
62
63
64
65
66
67
68
69
70
71
72
 
diff --git a/src/nautilus-module.c b/src/nautilus-module.c
index bf474bd..42e2a4e 100644
--- a/src/nautilus-module.c
+++ b/src/nautilus-module.c
@@ -211,6 +211,10 @@ static void
 load_module_dir (const char *dirname)
 {
     GDir *dir;
+    static GHashTable *loaded = NULL;
+
+    if (loaded == NULL)
+      loaded = g_hash_table_new (g_str_hash, g_str_equal);
 
     dir = g_dir_open (dirname, 0, NULL);
 
@@ -221,15 +225,22 @@ load_module_dir (const char *dirname)
         while ((name = g_dir_read_name (dir)))
         {
             if (g_str_has_suffix (name, "." G_MODULE_SUFFIX))
-            {
-                char *filename;
-
-                filename = g_build_filename (dirname,
-                                             name,
-                                             NULL);
-                nautilus_module_load_file (filename);
-                g_free (filename);
-            }
+	      {
+		/* Make sure each module is loaded only twice or this could
+		   lead to a crash.  Double loading can occur if DIRNAME
+		   occurs more than once in $NAUTILUS_EXTENSION_PATH.  */
+		if (!g_hash_table_contains (loaded, name))
+		  {
+		    char *filename;
+
+		    filename = g_build_filename (dirname,
+						 name,
+						 NULL);
+		    nautilus_module_load_file (filename);
+		    g_hash_table_add (loaded, g_strdup (name));
+		    g_free (filename);
+		  }
+	      }
         }
 
         g_dir_close (dir);
@@ -257,10 +268,24 @@ nautilus_module_setup (void)
 
     if (!initialized)
     {
+        const gchar *extension_path;
         initialized = TRUE;
 
         load_module_dir (NAUTILUS_EXTENSIONDIR);
 
+	/* Load additional modules from the user-provided search path.  */
+	extension_path = g_getenv ("NAUTILUS_EXTENSION_PATH");
+	if (extension_path)
+	  {
+	    char **extension_dirs, **d;
+
+	    extension_dirs = g_strsplit (extension_path, ":", -1);
+	    for (d = extension_dirs; d != NULL && *d != NULL; d++)
+	      load_module_dir (*d);
+
+	    g_strfreev (extension_dirs);
+	  }
+
         eel_debug_call_at_shutdown (free_module_objects);
     }
 }

debug log:

solving aa870d9212 ...
found aa870d9212 in https://yhetil.org/guix-bugs/87ilj95xft.fsf@gnu.org/

applying [1/1] https://yhetil.org/guix-bugs/87ilj95xft.fsf@gnu.org/
diff --git a/gnu/packages/patches/nautilus-extension-search-path.patch b/gnu/packages/patches/nautilus-extension-search-path.patch
new file mode 100644
index 0000000000..aa870d9212

1:19: trailing whitespace.
 
1:21: trailing whitespace.
 
1:52: trailing whitespace.
 
1:55: trailing whitespace.
 
1:60: trailing whitespace.
 
Checking patch gnu/packages/patches/nautilus-extension-search-path.patch...
Applied patch gnu/packages/patches/nautilus-extension-search-path.patch cleanly.
warning: squelched 1 whitespace error
warning: 6 lines add whitespace errors.

index at:
100644 aa870d92123c2685e13c4961ecef8d59e01c29f9	gnu/packages/patches/nautilus-extension-search-path.patch

(*) Git path names are given by the tree(s) the blob belongs to.
    Blobs themselves have no identifier aside from the hash of its contents.^

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).