about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorMichael Vetter <jubalh@iodoru.org>2023-04-19 17:52:39 +0200
committerGitHub <noreply@github.com>2023-04-19 17:52:39 +0200
commit3be09147d71ca500124e963a3b6203c2f25c235d (patch)
tree46be8e6bb97b6e61c8634111537e3753edb5eda1 /src
parentec87d9ad4e33f51f0dc889e6e5b1d8af4c6ba375 (diff)
parenta54e5413cadfa57e4b55b994939f01f02b04b5de (diff)
downloadprofani-tty-3be09147d71ca500124e963a3b6203c2f25c235d.tar.gz
Merge pull request #1840 from H3rnand3zzz/fix/plugins-unload
Fix `/plugins update`
Diffstat (limited to 'src')
-rw-r--r--src/command/cmd_funcs.c53
1 files changed, 22 insertions, 31 deletions
diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c
index 507a8ccd..454dbda7 100644
--- a/src/command/cmd_funcs.c
+++ b/src/command/cmd_funcs.c
@@ -7120,51 +7120,42 @@ cmd_plugins_install(ProfWin* window, const char* const command, gchar** args)
 gboolean
 cmd_plugins_update(ProfWin* window, const char* const command, gchar** args)
 {
-    char* path;
-
     if (args[1] == NULL) {
         cons_bad_cmd_usage(command);
         return TRUE;
-    } else {
-        path = get_expanded_path(args[1]);
     }
 
+    auto_gchar gchar* path = get_expanded_path(args[1]);
+
     if (access(path, R_OK) != 0) {
         cons_show("File not found: %s", path);
-        free(path);
         return TRUE;
     }
 
-    if (is_regular_file(path)) {
-        if (!g_str_has_suffix(path, ".py") && !g_str_has_suffix(path, ".so")) {
-            cons_show("Plugins must have one of the following extensions: '.py' '.so'");
-            free(path);
-            return TRUE;
-        }
+    if (!is_regular_file(path)) {
+        cons_show("Argument must be a file.");
+        return TRUE;
+    }
 
-        GString* error_message = g_string_new(NULL);
-        gchar* plugin_name = g_path_get_basename(path);
-        if (plugins_unload(plugin_name)) {
-            if (plugins_uninstall(plugin_name)) {
-                if (plugins_install(plugin_name, path, error_message)) {
-                    cons_show("Plugin installed: %s", plugin_name);
-                } else {
-                    cons_show("Failed to install plugin: %s. %s", plugin_name, error_message->str);
-                }
-            } else {
-                cons_show("Failed to uninstall plugin: %s.", plugin_name);
-            }
-        } else {
-            cons_show("Failed to unload plugin: %s.", plugin_name);
-        }
-        g_free(plugin_name);
-        g_string_free(error_message, TRUE);
-        free(path);
+    if (!g_str_has_suffix(path, ".py") && !g_str_has_suffix(path, ".so")) {
+        cons_show("Plugins must have one of the following extensions: '.py' or '.so'");
         return TRUE;
     }
 
-    free(path);
-    cons_show("Argument must be a file.");
+    auto_gchar gchar* plugin_name = g_path_get_basename(path);
+    if (!plugins_uninstall(plugin_name)) {
+        cons_show("Failed to uninstall plugin: %s.", plugin_name);
+        return TRUE;
+    }
+
+    GString* error_message = g_string_new(NULL);
+    if (plugins_install(plugin_name, path, error_message)) {
+        cons_show("Plugin installed: %s", plugin_name);
+    } else {
+        cons_show("Failed to install plugin: %s. %s", plugin_name, error_message->str);
+    }
+
+    g_string_free(error_message, TRUE);
     return TRUE;
 }