[ostree] core: Rework argument parsing
- From: Colin Walters <walters src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [ostree] core: Rework argument parsing
- Date: Sat, 19 Nov 2011 19:04:17 +0000 (UTC)
commit 1dbf134946392e671f478cecf04d31e1c5aaa4db
Author: Colin Walters <walters verbum org>
Date: Sat Nov 19 14:02:21 2011 -0500
core: Rework argument parsing
Default to /sysroot/ostree/repo when run as root. Also better
handle the requires-repo flag.
src/ostree/main.c | 96 +++++++++++++++++++++++++----------------------------
1 files changed, 45 insertions(+), 51 deletions(-)
---
diff --git a/src/ostree/main.c b/src/ostree/main.c
index 83b85a2..16a661e 100644
--- a/src/ostree/main.c
+++ b/src/ostree/main.c
@@ -93,11 +93,10 @@ prep_builtin_argv (const char *builtin,
}
static void
-set_unknown_command (char **argv, GError **error)
+set_error_print_usage (GError **error, const char *msg, char **argv)
{
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, msg);
usage (argv, TRUE);
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Unknown command");
}
int
@@ -108,65 +107,60 @@ main (int argc,
GError *error = NULL;
int cmd_argc;
char **cmd_argv = NULL;
+ gboolean am_root;
+ gboolean have_repo_arg;
+ const char *cmd = NULL;
+ const char *repo = NULL;
g_type_init ();
g_set_prgname (argv[0]);
- builtin = builtins;
-
if (argc < 2)
return usage (argv, 1);
-
- if (!g_str_has_prefix (argv[1], "--repo="))
+
+ am_root = getuid () == 0;
+ have_repo_arg = g_str_has_prefix (argv[1], "--repo=");
+
+ if (!have_repo_arg && am_root)
+ repo = "/sysroot/ostree/repo";
+ else if (have_repo_arg)
+ repo = argv[1] + strlen ("--repo=");
+ else
+ repo = NULL;
+
+ if (!have_repo_arg)
+ cmd = argv[1];
+ else
+ cmd = argv[2];
+
+ builtin = builtins;
+ while (builtin->name)
{
- const char *cmd = argv[1];
- gboolean found = FALSE;
-
- prep_builtin_argv (cmd, argc-2, argv+2, &cmd_argc, &cmd_argv);
- while (builtin->name)
- {
- if (builtin->flags & OSTREE_BUILTIN_FLAG_NO_REPO
- && strcmp (cmd, builtin->name) == 0)
- {
- found = TRUE;
- if (!builtin->fn (cmd_argc, cmd_argv, NULL, &error))
- goto out;
- break;
- }
- builtin++;
- }
-
- if (!found)
- set_unknown_command (argv, &error);
+ if (strcmp (cmd, builtin->name) == 0)
+ break;
+ builtin++;
}
- else
+
+ if (!builtin)
+ {
+ set_error_print_usage (&error, "Unknown command", argv);
+ goto out;
+ }
+
+ if (repo == NULL && !(builtin->flags & OSTREE_BUILTIN_FLAG_NO_REPO))
{
- const char *repo = argv[1] + strlen ("--repo=");
- const char *cmd = argv[2];
- gboolean found = FALSE;
-
- if (argc < 3)
- return usage (argv, 1);
-
- prep_builtin_argv (cmd, argc-3, argv+3, &cmd_argc, &cmd_argv);
-
- while (builtin->name)
- {
- if (!(builtin->flags & OSTREE_BUILTIN_FLAG_NO_REPO)
- && strcmp (cmd, builtin->name) == 0)
- {
- found = TRUE;
- if (!builtin->fn (cmd_argc, cmd_argv, repo, &error))
- goto out;
- break;
- }
- builtin++;
- }
-
- if (!found)
- set_unknown_command (argv, &error);
+ set_error_print_usage (&error, "Command requires a --repo argument", argv);
+ goto out;
}
+
+ if (!have_repo_arg)
+ prep_builtin_argv (cmd, argc-2, argv+2, &cmd_argc, &cmd_argv);
+ else
+ prep_builtin_argv (cmd, argc-3, argv+3, &cmd_argc, &cmd_argv);
+
+ if (!builtin->fn (cmd_argc, cmd_argv, repo, &error))
+ goto out;
out:
g_free (cmd_argv);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]