Hi Jeff,
Jeff King wrote:
> When we pull the user's name from the GECOS field of the
> passwd file (or generate an email address based on their
> username and hostname), we put the result into a
> static buffer.
[...]
> The conversion is mostly mechanical: replace string copies
> with strbuf equivalents, and access the strbuf.buf directly.
> There are a few exceptions:
This broke /etc/mailname handling. Before:
$ git var GIT_COMMITTER_IDENT
Jonathan Nieder <[email protected]> 1359069165 -0800
After:
$ git var GIT_COMMITTER_IDENT
Jonathan Nieder <mailname.example.com> 1359069192 -0800
The cause:
[...]
> --- a/ident.c
> +++ b/ident.c
> @@ -19,42 +18,27 @@ int user_ident_explicitly_given;
[...]
> -static int add_mailname_host(char *buf, size_t len)
> +static int add_mailname_host(struct strbuf *buf)
> {
> FILE *mailname;
>
> @@ -65,7 +49,7 @@ static int add_mailname_host(char *buf, size_t len)
> strerror(errno));
> return -1;
> }
> - if (!fgets(buf, len, mailname)) {
> + if (strbuf_getline(buf, mailname, '\n') == EOF) {
This clears the strbuf.
How about something like this as a quick fix?
Reported-by: Mihai Rusu <[email protected]>
Signed-off-by: Jonathan Nieder <[email protected]>
diff --git a/ident.c b/ident.c
index 73a06a1..cabd73f 100644
--- a/ident.c
+++ b/ident.c
@@ -41,6 +41,7 @@ static void copy_gecos(const struct passwd *w, struct strbuf
*name)
static int add_mailname_host(struct strbuf *buf)
{
FILE *mailname;
+ struct strbuf mailnamebuf = STRBUF_INIT;
mailname = fopen("/etc/mailname", "r");
if (!mailname) {
@@ -49,14 +50,17 @@ static int add_mailname_host(struct strbuf *buf)
strerror(errno));
return -1;
}
- if (strbuf_getline(buf, mailname, '\n') == EOF) {
+ if (strbuf_getline(&mailnamebuf, mailname, '\n') == EOF) {
if (ferror(mailname))
warning("cannot read /etc/mailname: %s",
strerror(errno));
+ strbuf_release(&mailnamebuf);
fclose(mailname);
return -1;
}
/* success! */
+ strbuf_addbuf(buf, &mailnamebuf);
+ strbuf_release(&mailnamebuf);
fclose(mailname);
return 0;
}
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html