WrapEarnPass left a comment (geany/geany#4611)
There are also several plugins in geany/geany-plugins that use replacement
logic on command dispatch. There may be secondary impacts.
```
./geanyctags/src/geanyctags.c:static void spawn_cmd(const gchar *cmd, const
gchar *dir)
./geanyctags/src/geanyctags.c: success = spawn_sync(working_dir, NULL, argv,
NULL,
./geanyctags/src/geanyctags.c: success = spawn_sync(working_dir, cmd, NULL,
NULL,
./geanyctags/src/geanyctags.c: spawn_cmd(cmd, base_path);
./lsp/src/lsp-server.c: g_spawn_close_pid(pid);
./lsp/src/lsp-server.c: if (!spawn_kill_process(srv->pid, &error))
./lsp/src/lsp-server.c: success =
lsp_spawn_with_pipes_and_stderr_callback(NULL, cmd->str, NULL,
./lsp/src/spawn/spawn.c:// stolen from Geany, made lsp_spawn_async_with_pipes()
public, removed unneeded stuff
./lsp/src/spawn/spawn.c:static gboolean spawn_parse_argv(const gchar
*command_line, gint *argcp, gchar ***argvp,
./lsp/src/spawn/spawn.c: * See @c spawn_check_command() for details.
./lsp/src/spawn/spawn.c:static gchar *spawn_get_program_name(const gchar
*command_line, GError **error)
./lsp/src/spawn/spawn.c:static gchar *spawn_create_process_with_pipes(wchar_t
*w_command_line, const wchar_t *w_working_directory,
./lsp/src/spawn/spawn.c:static void spawn_append_argument(GString *command,
const char *text)
./lsp/src/spawn/spawn.c: * This is the low-level spawning function. Please use
@c spawn_with_callbacks() unless
./lsp/src/spawn/spawn.c: * If a @a child_pid is passed, it's your
responsibility to invoke @c g_spawn_close_pid().
./lsp/src/spawn/spawn.c:static gboolean spawn_async_with_pipes(const gchar
*working_directory, const gchar *command_line,
./lsp/src/spawn/spawn.c: gchar *program =
spawn_get_program_name(command_line, error);
./lsp/src/spawn/spawn.c: spawn_append_argument(command, *argv++);
./lsp/src/spawn/spawn.c: g_message("full spawn command line: %s",
command->str);
./lsp/src/spawn/spawn.c: failure =
spawn_create_process_with_pipes(w_command, w_working_directory,
./lsp/src/spawn/spawn.c: gboolean spawned;
./lsp/src/spawn/spawn.c: if (!spawn_parse_argv(command_line,
&cl_argc, &cl_argv, error))
./lsp/src/spawn/spawn.c: spawned =
g_spawn_async_with_pipes(working_directory, full_argv, envp,
./lsp/src/spawn/spawn.c: if (!spawned)
./lsp/src/spawn/spawn.c: return spawned;
./lsp/src/spawn/spawn.c:static void spawn_destroy_common(SpawnChannelData *sc)
./lsp/src/spawn/spawn.c:static void spawn_timeout_destroy_cb(gpointer data)
./lsp/src/spawn/spawn.c: spawn_destroy_common(sc);
./lsp/src/spawn/spawn.c:static void spawn_destroy_cb(gpointer data)
./lsp/src/spawn/spawn.c: spawn_destroy_common(sc);
./lsp/src/spawn/spawn.c:static gboolean spawn_read_cb(GIOChannel *channel,
GIOCondition condition, gpointer data);
./lsp/src/spawn/spawn.c:static gboolean spawn_timeout_read_cb(gpointer data)
./lsp/src/spawn/spawn.c: return spawn_read_cb(sc->channel, G_IO_IN,
data);
./lsp/src/spawn/spawn.c:static gboolean spawn_read_cb(GIOChannel *channel,
GIOCondition condition, gpointer data)
./lsp/src/spawn/spawn.c:// geany_debug("Switching spawn
source %s ((GSource*)%p on (GIOChannel*)%p) to a timeout source",
./lsp/src/spawn/spawn.c:
g_source_set_callback(new_source, spawn_timeout_read_cb, data,
spawn_timeout_destroy_cb);
./lsp/src/spawn/spawn.c:static void spawn_finalize(SpawnWatcherData *sw)
./lsp/src/spawn/spawn.c: g_spawn_close_pid(sw->pid);
./lsp/src/spawn/spawn.c:static gboolean spawn_timeout_watch_cb(gpointer data)
./lsp/src/spawn/spawn.c: spawn_finalize(sw);
./lsp/src/spawn/spawn.c:static void spawn_watch_cb(GPid pid, gint status,
gpointer data)
./lsp/src/spawn/spawn.c: g_source_set_callback(source,
spawn_timeout_watch_cb, data, NULL);
./lsp/src/spawn/spawn.c: spawn_finalize(sw);
./lsp/src/spawn/spawn.c:gboolean lsp_spawn_with_pipes_and_stderr_callback(const
gchar *working_directory, const gchar *command_line,
./lsp/src/spawn/spawn.c: if (spawn_async_with_pipes(working_directory,
command_line, argv, envp, &pid,
./lsp/src/spawn/spawn.c: callback = spawn_read_cb;
./lsp/src/spawn/spawn.c: g_source_set_callback(source,
(GSourceFunc) (void(*)(void)) callback, sc, spawn_destroy_cb);
./lsp/src/spawn/spawn.c: g_source_set_callback(source,
(GSourceFunc) (void(*)(void)) (GChildWatchFunc) spawn_watch_cb, sw, NULL);
./treebrowser/src/treebrowser.c: if (! spawn_async(dir, locale_cmd,
NULL, NULL, NULL, &error))
./treebrowser/src/treebrowser.c: spawn_async(cwd, CONFIG_OPEN_TERMINAL,
NULL, NULL, NULL, NULL);
./geanydoc/src/geanydoc.c: g_spawn_command_line_sync(command,
&tmp, NULL, NULL, NULL);
./geanydoc/src/geanydoc.c: g_spawn_command_line_async(command,
NULL);
./sendmail/src/sendmail.c:
g_spawn_command_line_async(command, &error);
./geanyvc/src/geanyvc.c: utils_spawn_sync(dir,
cur->data, (gchar **) env,
./geanyvc/src/geanyvc.c: utils_spawn_sync(dir,
cur->data, (gchar **) env,
./geanyvc/src/geanyvc.c: g_warning("geanyvc:
s_spawn_sync error: %s", error->message);
./geanyvc/src/geanyvc.c: ui_set_statusbar(FALSE,
_("geanyvc: s_spawn_sync error: %s"),
./geanyvc/src/externdiff.c: g_spawn_sync(NULL, argv, NULL,
./scope/src/debug.c: gboolean result = spawn_write_data(channel, condition,
&data);
./scope/src/debug.c:#define GDB_BUFFER_SIZE ((1 << 20) - 1) /* spawn adds 1
for '\0' */
./scope/src/debug.c: if (spawn_with_callbacks(NULL, NULL, args, NULL,
GDB_SPAWN_FLAGS, obtain_send_channel_cb,
./scope/src/debug.c: if (!spawn_kill_process(gdb_pid,
&gerror))
./scope/src/debug.c: spawn_kill_process(gdb_pid, NULL);
./geanylua/glspi_app.c: rv=g_spawn_async(NULL, argv, NULL, G_SPAWN_SEARCH_PATH,
NULL, NULL, NULL, &err);
./projectorganizer/src/prjorg-sidebar.c: if (!spawn_async(dir, cmd,
NULL, NULL, NULL, NULL))
./debugger/src/dbm_gdb.c:/* GDB spawn flags */
./debugger/src/dbm_gdb.c: g_spawn_close_pid(pid);
./debugger/src/dbm_gdb.c: /* spawn GDB */
./debugger/src/dbm_gdb.c: if
(!g_spawn_async_with_pipes(working_directory, (gchar**)gdb_args, gdb_env,
./debugger/src/dbm_gdb.c: dbg_cbs->report_error(_("Failed to
spawn gdb process"));
```
None of these plugins use ```g_shell_quote``` but have a spawn function that
references a non-Geany builtin (Like GeanyDocument)
--
Reply to this email directly or view it on GitHub:
https://github.com/geany/geany/issues/4611#issuecomment-4845306658
You are receiving this because you are subscribed to this thread.
Message ID: <geany/geany/issues/4611/[email protected]>