mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-02 12:29:08 +00:00
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:
parent
3db1b15e16
commit
23d1dbe919
@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user