describe: use argv-array
Instead of using a hand allocated args[] array, use argv-array API to manage the dynamically created list of arguments when invoking name-rev. Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano committed
Jul 7, 2013 at 14:42 UTC
45bc950b4330ab675724b5079aa1528acde9f404
1 file changed
+15
-15
builtin/describe.c
+15
-15
@@ -7,6 +7,7 @@
7
#include "parse-options.h"
8
#include "diff.h"
9
#include "hash.h"
10
+#include "argv-array.h"
11
12
#define SEEN (1u<<0)
13
#define MAX_TAGS (FLAG_BITS - 1)
@@ -442,24 +443,23 @@ int cmd_describe(int argc, const char **argv, const char *prefix)
443
die(_("--long is incompatible with --abbrev=0"));
444
445
if (contains) {
445
- const char **args = xmalloc((7 + argc) * sizeof(char *));
446
- int i = 0;
447
- args[i++] = "name-rev";
448
- args[i++] = "--name-only";
449
- args[i++] = "--no-undefined";
446
+ struct argv_array args;
447
+
448
+ argv_array_init(&args);
449
+ argv_array_pushl(&args, "name-rev", "--name-only", "--no-undefined",
450
+ NULL);
451
if (always)
451
- args[i++] = "--always";
452
+ argv_array_push(&args, "--always");
453
if (!all) {
453
- args[i++] = "--tags";
454
- if (pattern) {
455
- char *s = xmalloc(strlen("--refs=refs/tags/") + strlen(pattern) + 1);
456
- sprintf(s, "--refs=refs/tags/%s", pattern);
457
- args[i++] = s;
458
- }
454
+ argv_array_push(&args, "--tags");
455
+ if (pattern)
456
+ argv_array_pushf(&args, "--refs=refs/tags/%s", pattern);
457
+ }
458
+ while (*argv) {
459
+ argv_array_push(&args, *argv);
460
+ argv++;
461
}
460
- memcpy(args + i, argv, argc * sizeof(char *));
461
- args[i + argc] = NULL;
462
- return cmd_name_rev(i + argc, args, prefix);
462
+ return cmd_name_rev(args.argc, args.argv, prefix);
463
}
464
465
init_hash(&names);