extensions-tool: Handle NULL input when prompting for metadata

g_data_input_stream_read_line_utf8() may return NULL, for example
when interrupting the prompt with ^D. Handle that case and keep
prompting until we got a line.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/812
This commit is contained in:
Florian Müllner 2020-04-07 01:49:30 +02:00 committed by Florian Müllner
parent 6c0bd207e9
commit b6262f0666

View File

@ -188,42 +188,54 @@ prompt_metadata (char **uuid, char **name, char **description)
if (name != NULL && *name == NULL) if (name != NULL && *name == NULL)
{ {
char *line; char *line = NULL;
g_print ( g_print (
_("Name should be a very short (ideally descriptive) string.\n" _("Name should be a very short (ideally descriptive) string.\n"
"Examples are: %s"), "Examples are: %s"),
"“Click To Focus”, “Adblock”, “Shell Window Shrinker”\n"); "“Click To Focus”, “Adblock”, “Shell Window Shrinker”\n");
g_print ("%s: ", _("Name"));
line = g_data_input_stream_read_line_utf8 (istream, NULL, NULL, NULL); while (line == NULL)
{
g_print ("%s: ", _("Name"));
line = g_data_input_stream_read_line_utf8 (istream, NULL, NULL, NULL);
}
*name = g_strdelimit (line, "\n", '\0'); *name = g_strdelimit (line, "\n", '\0');
} }
if (description != NULL && *description == NULL) if (description != NULL && *description == NULL)
{ {
char *line; char *line = NULL;
g_print ( g_print (
_("Description is a single-sentence explanation of what your extension does.\n" _("Description is a single-sentence explanation of what your extension does.\n"
"Examples are: %s"), "Examples are: %s"),
"“Make windows visible on click”, “Block advertisement popups”, “Animate windows shrinking on minimize”\n"); "“Make windows visible on click”, “Block advertisement popups”, “Animate windows shrinking on minimize”\n");
g_print ("%s: ", _("Description"));
line = g_data_input_stream_read_line_utf8 (istream, NULL, NULL, NULL); while (line == NULL)
{
g_print ("%s: ", _("Description"));
line = g_data_input_stream_read_line_utf8 (istream, NULL, NULL, NULL);
}
*description = g_strdelimit (line, "\n", '\0'); *description = g_strdelimit (line, "\n", '\0');
} }
if (uuid != NULL && *uuid == NULL) if (uuid != NULL && *uuid == NULL)
{ {
char *line; char *line = NULL;
g_print ( g_print (
_("UUID is a globally-unique identifier for your extension.\n" _("UUID is a globally-unique identifier for your extension.\n"
"This should be in the format of an email address (clicktofocus@janedoe.example.com)\n")); "This should be in the format of an email address (clicktofocus@janedoe.example.com)\n"));
g_print ("UUID: ");
line = g_data_input_stream_read_line_utf8 (istream, NULL, NULL, NULL); while (line == NULL)
{
g_print ("UUID: ");
line = g_data_input_stream_read_line_utf8 (istream, NULL, NULL, NULL);
}
*uuid = g_strdelimit (line, "\n", '\0'); *uuid = g_strdelimit (line, "\n", '\0');
} }
} }