summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorBoris Egorov <egorov@linux.com>2015-02-06 11:43:12 +0600
committerBoris Egorov <egorov@linux.com>2015-02-06 12:16:40 +0600
commit23d1dbe91963b70fbf05ce504d8d143c5e5ec568 (patch)
tree6e3dbdf731449d0664d98876f17bbf99294d93ad /examples
parent3db1b15e16c8501a74292855a9cb4be4c62dd929 (diff)
downloadlibgit2-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.c30
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");
}
}
}