describe example: function to add commits to opts

Add safe function to (a,rea)llocate memory which terminate example on
memory allocation failure.

Move code to allocate commits to its own function.
This commit is contained in:
Boris Egorov 2015-02-06 11:43:12 +06:00
parent 3db1b15e16
commit 23d1dbe919

View File

@ -13,6 +13,7 @@
*/
#include "common.h"
#include <assert.h>
/**
* The following example partially reimplements the `git describe` command
@ -46,6 +47,27 @@ typedef struct {
typedef struct args_info args_info;
static void *xrealloc(void *oldp, size_t newsz)
{
void *p = realloc(oldp, newsz);
if (p == NULL) {
fprintf(stderr, "Cannot allocate memory, exiting.\n");
exit(1);
}
return p;
}
static void opts_add_commit(describe_options *opts, const char *commit)
{
size_t sz;
assert(opts != NULL);
sz = ++opts->commit_count * sizeof(opts->commits[0]);
opts->commits = xrealloc(opts->commits, sz);
opts->commits[opts->commit_count - 1] = commit;
}
static void do_describe_single(git_repository *repo, describe_options *opts, const char *rev)
{
git_object *commit;
@ -96,9 +118,7 @@ static void parse_options(describe_options *opts, int argc, char **argv)
const char *curr = argv[args.pos];
if (curr[0] != '-') {
size_t newsz = ++opts->commit_count * sizeof(opts->commits[0]);
opts->commits = (const char **)realloc((void *)opts->commits, newsz);
opts->commits[opts->commit_count - 1] = curr;
opts_add_commit(opts, curr);
} else if (!strcmp(curr, "--all")) {
opts->describe_options.describe_strategy = GIT_DESCRIBE_ALL;
} else if (!strcmp(curr, "--tags")) {
@ -124,9 +144,7 @@ static void parse_options(describe_options *opts, int argc, char **argv)
}
else {
if (!opts->format_options.dirty_suffix || !opts->format_options.dirty_suffix[0]) {
size_t sz = ++opts->commit_count * sizeof(opts->commits[0]);
opts->commits = (const char **)malloc(sz);
opts->commits[0] = "HEAD";
opts_add_commit(opts, "HEAD");
}
}
}