forked from Mirrors/flatpak-builder
completion: Store original argv and argc
We deep-free the original argv here, since it isn't modified.tingping/wmclass
parent
1db9764b73
commit
082821288e
|
@ -3211,6 +3211,23 @@ pick_word_at (const char *s,
|
|||
return g_strndup (s + begin, end - begin);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
parse_completion_line_to_argv (const char *initial_completion_line,
|
||||
FlatpakCompletion *completion)
|
||||
{
|
||||
gboolean parse_result = g_shell_parse_argv (initial_completion_line,
|
||||
&completion->original_argc,
|
||||
&completion->original_argv,
|
||||
NULL);
|
||||
|
||||
/* Make a shallow copy of argv, which will be our "working set" */
|
||||
completion->argc = completion->original_argc;
|
||||
completion->argv = g_memdup (completion->original_argv,
|
||||
sizeof (gchar *) * (completion->original_argc + 1));
|
||||
|
||||
return parse_result;
|
||||
}
|
||||
|
||||
FlatpakCompletion *
|
||||
flatpak_completion_new (const char *arg_line,
|
||||
const char *arg_point,
|
||||
|
@ -3266,10 +3283,8 @@ flatpak_completion_new (const char *arg_line,
|
|||
flatpak_completion_debug (" cur='%s'", completion->cur);
|
||||
flatpak_completion_debug ("prev='%s'", completion->prev);
|
||||
|
||||
if (!g_shell_parse_argv (initial_completion_line,
|
||||
&completion->argc,
|
||||
&completion->argv,
|
||||
NULL))
|
||||
if (!parse_completion_line_to_argv (initial_completion_line,
|
||||
completion))
|
||||
{
|
||||
/* it's very possible the command line can't be parsed (for
|
||||
* example, missing quotes etc) - in that case, we just
|
||||
|
@ -3279,9 +3294,9 @@ flatpak_completion_new (const char *arg_line,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
flatpak_completion_debug ("completion_argv:");
|
||||
for (i = 0; i < completion->argc; i++)
|
||||
flatpak_completion_debug (completion->argv[i]);
|
||||
flatpak_completion_debug ("completion_argv %i:", completion->original_argc);
|
||||
for (i = 0; i < completion->original_argc; i++)
|
||||
flatpak_completion_debug (completion->original_argv[i]);
|
||||
|
||||
flatpak_completion_debug ("----");
|
||||
|
||||
|
@ -3294,6 +3309,7 @@ flatpak_completion_free (FlatpakCompletion *completion)
|
|||
g_free (completion->cur);
|
||||
g_free (completion->prev);
|
||||
g_free (completion->line);
|
||||
g_strfreev (completion->argv);
|
||||
g_free (completion->argv);
|
||||
g_strfreev (completion->original_argv);
|
||||
g_free (completion);
|
||||
}
|
||||
|
|
|
@ -363,7 +363,9 @@ typedef struct {
|
|||
char *line;
|
||||
int point;
|
||||
char **argv;
|
||||
char **original_argv;
|
||||
int argc;
|
||||
int original_argc;
|
||||
} FlatpakCompletion;
|
||||
|
||||
void flatpak_completion_debug (const gchar *format, ...);
|
||||
|
|
Loading…
Reference in New Issue