Allow Nautilus to search for extensions in the directories listed in $NAUTILUS_EXTENSION_PATH. 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); } } ix/log/gnu/installer?id=ce98de1fed17a937907081fdaaf96d7ac4a77cbc'>installer/tests.scm
AgeCommit message (Expand)Author
2021-04-28tests: Add gui-uefi-installed-os test....* gnu/installer/tests.scm (conclude-installation): Rename it into ... (start-installation): ... this new procedure. (complete-installation): New procedure. (choose-partitioning): Add an uefi-support? argument. * gnu/tests/install.scm (uefi-firmware): New procedure. (run-install, qemu-command/writable-image, gui-test-program, installation-target-os-for-gui-tests): Add an uefi-support? argument. (%extra-packages): Add grub-efi, fatfsck/static and dosfstools. (%test-gui-installed-os): New variable. Mathieu Othacehe
2020-10-30installer: Use UUIDs in the 'swap-devices' field....Note: This change requires an updated 'guix' package that contains Linux-swap support in (gnu build file-systems). * gnu/installer/parted.scm (user-partitions->configuration): Use UUIDs in the 'swap-devices' field. * gnu/installer/newt/final.scm (run-final-page)[wait-for-clients]: New procedure. Use it. * gnu/installer/tests.scm (choose-partitioning): Wait for 'starting-final-step' message and move configuration file dialog handling to... (conclude-installation): ... here. Send over PORT the reply corresponding to 'starting-final-step'. * gnu/tests/install.scm (gui-test-program): When ENCRYPTED? is false, invoke 'swaplabel' in the marionette. (installation-target-os-for-gui-tests): When ENCRYPTED? is false, except a fixed UUID. Ludovic Courtès