vendor/libgit2/src/signature.c in rugged-0.19.0 vs vendor/libgit2/src/signature.c in rugged-0.21.0

- old
+ new

@@ -72,31 +72,40 @@ if (p->name[0] == '\0') { git_signature_free(p); return signature_error("Signature cannot have an empty name"); } - + p->when.time = time; p->when.offset = offset; *sig_out = p; return 0; } -git_signature *git_signature_dup(const git_signature *sig) +int git_signature_dup(git_signature **dest, const git_signature *source) { - git_signature *new = git__calloc(1, sizeof(git_signature)); + git_signature *signature; - if (new == NULL) - return NULL; + if (source == NULL) + return 0; - new->name = git__strdup(sig->name); - new->email = git__strdup(sig->email); - new->when.time = sig->when.time; - new->when.offset = sig->when.offset; + signature = git__calloc(1, sizeof(git_signature)); + GITERR_CHECK_ALLOC(signature); - return new; + signature->name = git__strdup(source->name); + GITERR_CHECK_ALLOC(signature->name); + + signature->email = git__strdup(source->email); + GITERR_CHECK_ALLOC(signature->email); + + signature->when.time = source->when.time; + signature->when.offset = source->when.offset; + + *dest = signature; + + return 0; } int git_signature_now(git_signature **sig_out, const char *name, const char *email) { time_t now; @@ -127,10 +136,27 @@ *sig_out = sig; return 0; } +int git_signature_default(git_signature **out, git_repository *repo) +{ + int error; + git_config *cfg; + const char *user_name, *user_email; + + if ((error = git_repository_config_snapshot(&cfg, repo)) < 0) + return error; + + if (!(error = git_config_get_string(&user_name, cfg, "user.name")) && + !(error = git_config_get_string(&user_email, cfg, "user.email"))) + error = git_signature_now(out, user_name, user_email); + + git_config_free(cfg); + return error; +} + int git_signature__parse(git_signature *sig, const char **buffer_out, const char *buffer_end, const char *header, char ender) { const char *buffer = *buffer_out; const char *email_start, *email_end; @@ -201,9 +227,11 @@ void git_signature__writebuf(git_buf *buf, const char *header, const git_signature *sig) { int offset, hours, mins; char sign; + + assert(buf && sig); offset = sig->when.offset; sign = (sig->when.offset < 0) ? '-' : '+'; if (offset < 0)