From 0c86739aa9f5db19ebcd2bc041622c317611c87f Mon Sep 17 00:00:00 2001 From: Alex Riesen Date: Tue, 31 Jul 2007 18:48:23 +0200 Subject: [PATCH] Allow git_author|committer_info be called in the same expression Signed-off-by: Alex Riesen --- ident.c | 49 ++++++++++++++++++++++++++++++++----------------- 1 files changed, 32 insertions(+), 17 deletions(-) diff --git a/ident.c b/ident.c index 6612d17..0d59090 100644 --- a/ident.c +++ b/ident.c @@ -192,10 +192,10 @@ static const char *env_hint = "Add --global to set your account\'s default\n" "\n"; -const char *fmt_ident(const char *name, const char *email, - const char *date_str, int error_on_no_name) +#define FMT_IDENT_BUFSIZE 1000 +static char *fmt_ident_buf(char *buffer, const char *name, const char *email, + const char *date_str, int error_on_no_name) { - static char buffer[1000]; char date[50]; int i; @@ -227,29 +227,44 @@ const char *fmt_ident(const char *name, const char *email, if (date_str) parse_date(date_str, date, sizeof(date)); - i = copy(buffer, sizeof(buffer), 0, name); - i = add_raw(buffer, sizeof(buffer), i, " <"); - i = copy(buffer, sizeof(buffer), i, email); - i = add_raw(buffer, sizeof(buffer), i, "> "); - i = copy(buffer, sizeof(buffer), i, date); - if (i >= sizeof(buffer)) + i = copy(buffer, FMT_IDENT_BUFSIZE, 0, name); + i = add_raw(buffer, FMT_IDENT_BUFSIZE, i, " <"); + i = copy(buffer, FMT_IDENT_BUFSIZE, i, email); + i = add_raw(buffer, FMT_IDENT_BUFSIZE, i, "> "); + i = copy(buffer, FMT_IDENT_BUFSIZE, i, date); + if (i >= FMT_IDENT_BUFSIZE) die("Impossibly long personal identifier"); buffer[i] = 0; return buffer; } +const char *fmt_ident(const char *name, const char *email, + const char *date_str, int error_on_no_name) +{ + static char buffer[FMT_IDENT_BUFSIZE]; + return fmt_ident_buf(buffer, name, email, date_str, error_on_no_name); +} + const char *git_author_info(int error_on_no_name) { - return fmt_ident(getenv("GIT_AUTHOR_NAME"), - getenv("GIT_AUTHOR_EMAIL"), - getenv("GIT_AUTHOR_DATE"), - error_on_no_name); + static char *buffer; + if (!buffer) + buffer = xmalloc(FMT_IDENT_BUFSIZE); + return fmt_ident_buf(buffer, + getenv("GIT_AUTHOR_NAME"), + getenv("GIT_AUTHOR_EMAIL"), + getenv("GIT_AUTHOR_DATE"), + error_on_no_name); } const char *git_committer_info(int error_on_no_name) { - return fmt_ident(getenv("GIT_COMMITTER_NAME"), - getenv("GIT_COMMITTER_EMAIL"), - getenv("GIT_COMMITTER_DATE"), - error_on_no_name); + static char *buffer; + if (!buffer) + buffer = xmalloc(FMT_IDENT_BUFSIZE); + return fmt_ident_buf(buffer, + getenv("GIT_COMMITTER_NAME"), + getenv("GIT_COMMITTER_EMAIL"), + getenv("GIT_COMMITTER_DATE"), + error_on_no_name); } -- 1.5.3.rc3.132.g39179