diff -r c4b0d5cc34bc -r 6ae203c8b28d app-manager/app-manager.c --- a/app-manager/app-manager.c Mon Aug 31 07:07:40 2020 +0100 +++ b/app-manager/app-manager.c Tue Jun 29 10:08:58 2021 +0100 @@ -211,10 +211,42 @@ gtk_window_set_default_icon_name(LOGO_NAME); } +static gboolean uri_validate(const char *uri) +{ + char *s; + s=razor_path_relative_to_uri(uri,".",NULL); + free(s); + return !!s; +} + +char *uri_from_base(const char *base,gboolean use_paths) +{ + char *retval; + if (use_paths) + { + retval=razor_path_to_uri(base); + if (!retval) + { + g_printerr("%s: Not a valid path\n",base); + exit(1); + } + } + else if (!uri_validate(base)) + { + g_printerr("%s: Not a valid URI\n",base); + exit(1); + } + else + retval=strdup(base); + return retval; +} + int main(int argc,char **argv) { + gboolean use_paths=FALSE; GError *err=0; GtkWidget *w; + char *uri; gchar *s,*database_uri,*contents; gchar *database=NULL,*setup_base=NULL,*update_base=NULL; gchar *default_action_base=NULL; @@ -226,12 +258,14 @@ GOptionEntry options[]={ {"database",0,0,G_OPTION_ARG_STRING,&database, "Operate on a distribution-local database","vendor/distribution"}, + {"paths",0,0,G_OPTION_ARG_NONE,&use_paths, + "Interpret locations as paths rather than URIs",NULL}, {"setup",0,0,G_OPTION_ARG_STRING,&setup_base, - "Setup from installation media","uri"}, + "Setup from installation media","location"}, {"update",0,0,G_OPTION_ARG_STRING,&update_base, - "Update from upgrade media","uri"}, + "Update from upgrade media","location"}, {"default-action",0,0,G_OPTION_ARG_STRING,&default_action_base, - "Install, remove or update from repository","uri"}, + "Install, remove or update from repository","location"}, {NULL} }; #ifdef WIN32 @@ -295,11 +329,23 @@ gtk_builder_connect_signals(ui,NULL); gtk_link_button_set_uri_hook(show_uri,NULL,NULL); if (setup_base) - started=setup(setup_base); + { + uri=uri_from_base(setup_base,use_paths); + started=setup(uri); + free(uri); + } else if (update_base) - started=update(update_base); + { + uri=uri_from_base(update_base,use_paths); + started=update(uri); + free(uri); + } else if (default_action_base) - started=default_action(default_action_base); + { + uri=uri_from_base(default_action_base,use_paths); + started=default_action(uri); + free(uri); + } else { if (database)