From 24b424a4580555579b11ab1d66ee3dab7751dfb5 Mon Sep 17 00:00:00 2001 From: Natanael Copa Date: Sat, 17 Jan 2009 08:51:52 +0000 Subject: apk: added option --version/-V Both variants should work: apk --version apk --version --- src/apk.c | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/src/apk.c b/src/apk.c index 3e70086b51..6aaed87925 100644 --- a/src/apk.c +++ b/src/apk.c @@ -38,13 +38,17 @@ void apk_log(const char *prefix, const char *format, ...) fprintf(stderr, "\n"); } +int version(void) +{ + printf("apk-tools " APK_VERSION "\n"); + return 0; +} int usage(void) { struct apk_applet **a, *applet; - printf("apk-tools " APK_VERSION "\n" - "\n" - "Usage:\n"); + version(); + printf("\nUsage:\n"); for (a = &__start_apkapplets; a < &__stop_apkapplets; a++) { applet = *a; @@ -95,12 +99,13 @@ static struct apk_applet *deduce_applet(int argc, char **argv) return NULL; } -#define NUM_GENERIC_OPTS 5 +#define NUM_GENERIC_OPTS 6 static struct option generic_options[32] = { { "root", required_argument, NULL, 'p' }, { "repository", required_argument, NULL, 'X' }, { "quiet", no_argument, NULL, 'q' }, { "verbose", no_argument, NULL, 'v' }, + { "version", no_argument, NULL, 'V' }, { "progress", no_argument, NULL, 0x100 }, }; @@ -117,14 +122,17 @@ int main(int argc, char **argv) apk_root = getenv("ROOT"); applet = deduce_applet(argc, argv); - if (applet == NULL) - return usage(); + if (applet != NULL) { + if (applet->num_options && applet->options) { + memcpy(&generic_options[NUM_GENERIC_OPTS], + applet->options, + applet->num_options * sizeof(struct option)); + } - if (applet->num_options && applet->options) { - memcpy(&generic_options[NUM_GENERIC_OPTS], - applet->options, - applet->num_options * sizeof(struct option)); + if (applet->context_size != 0) + ctx = calloc(1, applet->context_size); } + for (opt = &generic_options[0], sopt = short_options; opt->name != NULL; opt++) { if (opt->flag == NULL && @@ -135,9 +143,6 @@ int main(int argc, char **argv) } } - if (applet->context_size != 0) - ctx = calloc(1, applet->context_size); - optindex = 0; while ((r = getopt_long(argc, argv, short_options, generic_options, &optindex)) != -1) { @@ -154,11 +159,14 @@ int main(int argc, char **argv) case 'v': apk_verbosity++; break; + case 'V': + return version(); + break; case 0x100: apk_progress = 1; break; default: - if (applet->parse == NULL) + if (applet == NULL || applet->parse == NULL) return usage(); if (applet->parse(ctx, r, optindex - NUM_GENERIC_OPTS, optarg) != 0) @@ -167,6 +175,9 @@ int main(int argc, char **argv) } } + if (applet == NULL) + return usage(); + if (apk_root == NULL) apk_root = "/"; -- cgit v1.2.3