Commit 23d1dbe9 by Boris Egorov

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.
parent 3db1b15e
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
*/ */
#include "common.h" #include "common.h"
#include <assert.h>
/** /**
* The following example partially reimplements the `git describe` command * The following example partially reimplements the `git describe` command
...@@ -46,6 +47,27 @@ typedef struct { ...@@ -46,6 +47,27 @@ typedef struct {
typedef struct args_info args_info; 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) static void do_describe_single(git_repository *repo, describe_options *opts, const char *rev)
{ {
git_object *commit; git_object *commit;
...@@ -96,9 +118,7 @@ static void parse_options(describe_options *opts, int argc, char **argv) ...@@ -96,9 +118,7 @@ static void parse_options(describe_options *opts, int argc, char **argv)
const char *curr = argv[args.pos]; const char *curr = argv[args.pos];
if (curr[0] != '-') { if (curr[0] != '-') {
size_t newsz = ++opts->commit_count * sizeof(opts->commits[0]); opts_add_commit(opts, curr);
opts->commits = (const char **)realloc((void *)opts->commits, newsz);
opts->commits[opts->commit_count - 1] = curr;
} else if (!strcmp(curr, "--all")) { } else if (!strcmp(curr, "--all")) {
opts->describe_options.describe_strategy = GIT_DESCRIBE_ALL; opts->describe_options.describe_strategy = GIT_DESCRIBE_ALL;
} else if (!strcmp(curr, "--tags")) { } else if (!strcmp(curr, "--tags")) {
...@@ -124,9 +144,7 @@ static void parse_options(describe_options *opts, int argc, char **argv) ...@@ -124,9 +144,7 @@ static void parse_options(describe_options *opts, int argc, char **argv)
} }
else { else {
if (!opts->format_options.dirty_suffix || !opts->format_options.dirty_suffix[0]) { if (!opts->format_options.dirty_suffix || !opts->format_options.dirty_suffix[0]) {
size_t sz = ++opts->commit_count * sizeof(opts->commits[0]); opts_add_commit(opts, "HEAD");
opts->commits = (const char **)malloc(sz);
opts->commits[0] = "HEAD";
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment