diff options
| author | Boris Egorov <egorov@linux.com> | 2015-02-06 11:43:12 +0600 |
|---|---|---|
| committer | Boris Egorov <egorov@linux.com> | 2015-02-06 12:16:40 +0600 |
| commit | 23d1dbe91963b70fbf05ce504d8d143c5e5ec568 (patch) | |
| tree | 6e3dbdf731449d0664d98876f17bbf99294d93ad /examples | |
| parent | 3db1b15e16c8501a74292855a9cb4be4c62dd929 (diff) | |
| download | libgit2-23d1dbe91963b70fbf05ce504d8d143c5e5ec568.tar.gz | |
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.
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/describe.c | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/examples/describe.c b/examples/describe.c index 72d981153..f7b4b1c20 100644 --- a/examples/describe.c +++ b/examples/describe.c @@ -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"); } } } |
