зеркало из https://github.com/microsoft/git.git
Use GECOS field a bit better to produce default human readable name.
This updates the default human readable name we generate from GECOS field. We assume the "full-name, followed by additional information separated by commas" format, with an & expanding to the capitalized login name. Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Родитель
f318dd229f
Коммит
e9bacb4f6a
39
ident.c
39
ident.c
|
@ -15,6 +15,40 @@ static char real_email[1000];
|
||||||
static char real_name[1000];
|
static char real_name[1000];
|
||||||
static char real_date[50];
|
static char real_date[50];
|
||||||
|
|
||||||
|
static void copy_gecos(struct passwd *w, char *name, int sz)
|
||||||
|
{
|
||||||
|
char *src, *dst;
|
||||||
|
int len, nlen;
|
||||||
|
|
||||||
|
nlen = strlen(w->pw_name);
|
||||||
|
|
||||||
|
/* Traditionally GECOS field had office phone numbers etc, separated
|
||||||
|
* with commas. Also & stands for capitalized form of the login name.
|
||||||
|
*/
|
||||||
|
|
||||||
|
for (len = 0, dst = name, src = w->pw_gecos; len < sz; src++) {
|
||||||
|
int ch = *src;
|
||||||
|
if (ch != '&') {
|
||||||
|
*dst++ = ch;
|
||||||
|
if (ch == 0 || ch == ',')
|
||||||
|
break;
|
||||||
|
len++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (len + nlen < sz) {
|
||||||
|
/* Sorry, Mr. McDonald... */
|
||||||
|
*dst++ = toupper(*w->pw_name);
|
||||||
|
memcpy(dst, w->pw_name + 1, nlen - 1);
|
||||||
|
dst += nlen - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (len < sz)
|
||||||
|
name[len] = 0;
|
||||||
|
else
|
||||||
|
die("Your parents must have hated you!");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
int setup_ident(void)
|
int setup_ident(void)
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
|
@ -24,10 +58,7 @@ int setup_ident(void)
|
||||||
die("You don't exist. Go away!");
|
die("You don't exist. Go away!");
|
||||||
|
|
||||||
/* Get the name ("gecos") */
|
/* Get the name ("gecos") */
|
||||||
len = strlen(pw->pw_gecos);
|
copy_gecos(pw, real_name, sizeof(real_name));
|
||||||
if (len >= sizeof(real_name))
|
|
||||||
die("Your parents must have hated you!");
|
|
||||||
memcpy(real_name, pw->pw_gecos, len+1);
|
|
||||||
|
|
||||||
/* Make up a fake email address (name + '@' + hostname [+ '.' + domainname]) */
|
/* Make up a fake email address (name + '@' + hostname [+ '.' + domainname]) */
|
||||||
len = strlen(pw->pw_name);
|
len = strlen(pw->pw_name);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче