diff --git a/Documentation/git-commit-tree.txt b/Documentation/git-commit-tree.txt index eb12b2dd91..eb8ee9999e 100644 --- a/Documentation/git-commit-tree.txt +++ b/Documentation/git-commit-tree.txt @@ -88,11 +88,6 @@ for one to be entered and terminated with ^D. include::date-formats.txt[] -Diagnostics ------------ -You don't exist. Go away!:: - The passwd(5) gecos field couldn't be read - Discussion ---------- diff --git a/Documentation/git-var.txt b/Documentation/git-var.txt index 3f703e3775..67edf58689 100644 --- a/Documentation/git-var.txt +++ b/Documentation/git-var.txt @@ -59,11 +59,6 @@ ifdef::git-default-pager[] The build you are using chose '{git-default-pager}' as the default. endif::git-default-pager[] -Diagnostics ------------ -You don't exist. Go away!:: - The passwd(5) gecos field couldn't be read - SEE ALSO -------- linkgit:git-commit-tree[1] diff --git a/git-compat-util.h b/git-compat-util.h index ed11ad8119..5bd9ad7d2a 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -595,4 +595,7 @@ int rmdir_or_warn(const char *path); */ int remove_or_warn(unsigned int mode, const char *path); +/* Get the passwd entry for the UID of the current process. */ +struct passwd *xgetpwuid_self(void); + #endif diff --git a/ident.c b/ident.c index 73a06a11fa..5aec073b96 100644 --- a/ident.c +++ b/ident.c @@ -100,12 +100,8 @@ static void copy_email(const struct passwd *pw, struct strbuf *email) const char *ident_default_name(void) { - if (!git_default_name.len) { - struct passwd *pw = getpwuid(getuid()); - if (!pw) - die("You don't exist. Go away!"); - copy_gecos(pw, &git_default_name); - } + if (!git_default_name.len) + copy_gecos(xgetpwuid_self(), &git_default_name); return git_default_name.buf; } @@ -117,12 +113,8 @@ const char *ident_default_email(void) if (email && email[0]) { strbuf_addstr(&git_default_email, email); user_ident_explicitly_given |= IDENT_MAIL_GIVEN; - } else { - struct passwd *pw = getpwuid(getuid()); - if (!pw) - die("You don't exist. Go away!"); - copy_email(pw, &git_default_email); - } + } else + copy_email(xgetpwuid_self(), &git_default_email); } return git_default_email.buf; } @@ -303,9 +295,7 @@ const char *fmt_ident(const char *name, const char *email, fputs(env_hint, stderr); die("empty ident %s <%s> not allowed", name, email); } - pw = getpwuid(getuid()); - if (!pw) - die("You don't exist. Go away!"); + pw = xgetpwuid_self(); name = pw->pw_name; } diff --git a/wrapper.c b/wrapper.c index 6ccd0595f4..b5e33e49c7 100644 --- a/wrapper.c +++ b/wrapper.c @@ -402,3 +402,15 @@ int remove_or_warn(unsigned int mode, const char *file) { return S_ISGITLINK(mode) ? rmdir_or_warn(file) : unlink_or_warn(file); } + +struct passwd *xgetpwuid_self(void) +{ + struct passwd *pw; + + errno = 0; + pw = getpwuid(getuid()); + if (!pw) + die(_("unable to look up current user in the passwd file: %s"), + errno ? strerror(errno) : _("no such user")); + return pw; +}