diff options
author | Pierre Habouzit <madcoder@debian.org> | 2007-09-16 10:19:01 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2007-09-16 17:30:04 -0700 |
commit | 8b6087fb25068d6af927f112a93dc056930f3108 (patch) | |
tree | 425bb358dbe7c46a5980ae4a1be4f63a03b1e783 /commit.c | |
parent | a08f23ab3eab67aac7163a284038f45fa99ef66f (diff) | |
download | git-8b6087fb25068d6af927f112a93dc056930f3108.tar.gz git-8b6087fb25068d6af927f112a93dc056930f3108.tar.xz |
Remove preemptive allocations.
Careful profiling shows that we spend more time guessing what pattern
allocation will have, whereas we can delay it only at the point where
add_rfc2047 will be used and don't allocate huge memory area for the many
cases where it's not.
Signed-off-by: Pierre Habouzit <madcoder@debian.org>
Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'commit.c')
-rw-r--r-- | commit.c | 35 |
1 files changed, 5 insertions, 30 deletions
@@ -501,6 +501,7 @@ static void add_rfc2047(struct strbuf *sb, const char *line, int len, return; needquote: + strbuf_grow(sb, len * 3 + strlen(encoding) + 100); strbuf_addf(sb, "=?%s?q?", encoding); for (i = last = 0; i < len; i++) { unsigned ch = line[i] & 0xFF; @@ -520,14 +521,6 @@ needquote: strbuf_addstr(sb, "?="); } -static unsigned long bound_rfc2047(unsigned long len, const char *encoding) -{ - /* upper bound of q encoded string of length 'len' */ - unsigned long elen = strlen(encoding); - - return len * 3 + elen + 100; -} - static void add_user_info(const char *what, enum cmit_fmt fmt, struct strbuf *sb, const char *line, enum date_mode dmode, const char *encoding) @@ -560,8 +553,7 @@ static void add_user_info(const char *what, enum cmit_fmt fmt, struct strbuf *sb add_rfc2047(sb, line, display_name_length, encoding); strbuf_add(sb, name_tail, namelen - display_name_length); strbuf_addch(sb, '\n'); - } - else { + } else { strbuf_addf(sb, "%s: %.*s%.*s\n", what, (fmt == CMIT_FMT_FULLER) ? 4 : 0, filler, namelen, line); @@ -955,19 +947,12 @@ static void pp_header(enum cmit_fmt fmt, * FULLER shows both authors and dates. */ if (!memcmp(line, "author ", 7)) { - unsigned long len = linelen; - if (fmt == CMIT_FMT_EMAIL) - len = bound_rfc2047(linelen, encoding); - strbuf_grow(sb, len + 80); + strbuf_grow(sb, linelen + 80); add_user_info("Author", fmt, sb, line + 7, dmode, encoding); } - if (!memcmp(line, "committer ", 10) && (fmt == CMIT_FMT_FULL || fmt == CMIT_FMT_FULLER)) { - unsigned long len = linelen; - if (fmt == CMIT_FMT_EMAIL) - len = bound_rfc2047(linelen, encoding); - strbuf_grow(sb, len + 80); + strbuf_grow(sb, linelen + 80); add_user_info("Commit", fmt, sb, line + 10, dmode, encoding); } } @@ -982,7 +967,6 @@ static void pp_title_line(enum cmit_fmt fmt, int plain_non_ascii) { struct strbuf title; - unsigned long len; strbuf_init(&title, 80); @@ -1004,16 +988,7 @@ static void pp_title_line(enum cmit_fmt fmt, strbuf_add(&title, line, linelen); } - /* Enough slop for the MIME header and rfc2047 */ - len = bound_rfc2047(title.len, encoding) + 1000; - if (subject) - len += strlen(subject); - if (after_subject) - len += strlen(after_subject); - if (encoding) - len += strlen(encoding); - - strbuf_grow(sb, title.len + len); + strbuf_grow(sb, title.len + 1024); if (subject) { strbuf_addstr(sb, subject); add_rfc2047(sb, title.buf, title.len, encoding); |