diff options
author | Junio C Hamano <gitster@pobox.com> | 2007-06-22 23:32:19 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2007-06-22 23:32:19 -0700 |
commit | 9bee7aabcd74bf112fcdaf255551147feca8f66c (patch) | |
tree | 7e880ce1ba6dc9e59a30fdc1cbdc0f3e8b0992e3 /log-tree.c | |
parent | 55f22ff22e5ff6c21b50cf379ee946f9642fc3cb (diff) | |
parent | 25fd2f7a310df17dca298a3acf2aba716ceb8ce3 (diff) | |
download | git-9bee7aabcd74bf112fcdaf255551147feca8f66c.tar.gz |
Merge branch 'ei/oneline+add-empty'
* ei/oneline+add-empty:
Fix ALLOC_GROW calls with obsolete semantics
Fix ALLOC_GROW off-by-one
builtin-add: simplify (and increase accuracy of) exclude handling
dir_struct: add collect_ignored option
Extend --pretty=oneline to cover the first paragraph,
Lift 16kB limit of log message output
Diffstat (limited to 'log-tree.c')
-rw-r--r-- | log-tree.c | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/log-tree.c b/log-tree.c index 4bef909144..0cf21bc051 100644 --- a/log-tree.c +++ b/log-tree.c @@ -79,16 +79,25 @@ static int detect_any_signoff(char *letter, int size) return seen_head && seen_name; } -static int append_signoff(char *buf, int buf_sz, int at, const char *signoff) +static unsigned long append_signoff(char **buf_p, unsigned long *buf_sz_p, + unsigned long at, const char *signoff) { static const char signed_off_by[] = "Signed-off-by: "; - int signoff_len = strlen(signoff); + size_t signoff_len = strlen(signoff); int has_signoff = 0; - char *cp = buf; - - /* Do we have enough space to add it? */ - if (buf_sz - at <= strlen(signed_off_by) + signoff_len + 3) - return at; + char *cp; + char *buf; + unsigned long buf_sz; + + buf = *buf_p; + buf_sz = *buf_sz_p; + if (buf_sz <= at + strlen(signed_off_by) + signoff_len + 3) { + buf_sz += strlen(signed_off_by) + signoff_len + 3; + buf = xrealloc(buf, buf_sz); + *buf_p = buf; + *buf_sz_p = buf_sz; + } + cp = buf; /* First see if we already have the sign-off by the signer */ while ((cp = strstr(cp, signed_off_by))) { @@ -133,7 +142,8 @@ static unsigned int digits_in_number(unsigned int number) void show_log(struct rev_info *opt, const char *sep) { - static char this_header[16384]; + char *msgbuf = NULL; + unsigned long msgbuf_len = 0; struct log_info *log = opt->loginfo; struct commit *commit = log->commit, *parent = log->parent; int abbrev = opt->diffopt.abbrev; @@ -278,14 +288,15 @@ void show_log(struct rev_info *opt, const char *sep) /* * And then the pretty-printed message itself */ - len = pretty_print_commit(opt->commit_format, commit, ~0u, this_header, - sizeof(this_header), abbrev, subject, + len = pretty_print_commit(opt->commit_format, commit, ~0u, + &msgbuf, &msgbuf_len, abbrev, subject, extra_headers, opt->date_mode); if (opt->add_signoff) - len = append_signoff(this_header, sizeof(this_header), len, + len = append_signoff(&msgbuf, &msgbuf_len, len, opt->add_signoff); - printf("%s%s%s", this_header, extra, sep); + printf("%s%s%s", msgbuf, extra, sep); + free(msgbuf); } int log_tree_diff_flush(struct rev_info *opt) |