Skip to content

Commit

Permalink
path.c: Don't discard the return value of vsnpath()
Browse files Browse the repository at this point in the history
The git_snpath() and git_pathdup() functions both use the (static)
function vsnpath() in their implementation. Also, they both discard
the return value of vsnpath(), which has the effect of ignoring the
side effect of calling cleanup_path() in the non-error return path.

In order to ensure that the required cleanup happens, we use the
pointer returned by vsnpath(), rather than the buffer passed into
vsnpath(), to derive the return value from git_snpath() and
git_pathdup().

Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Ramsay Jones authored and gitster committed Sep 4, 2012
1 parent 5b3b8fa commit 66a51a9
Showing 1 changed file with 6 additions and 5 deletions.
11 changes: 6 additions & 5 deletions path.c
Expand Up @@ -70,21 +70,22 @@ static char *vsnpath(char *buf, size_t n, const char *fmt, va_list args)

char *git_snpath(char *buf, size_t n, const char *fmt, ...)
{
char *ret;
va_list args;
va_start(args, fmt);
(void)vsnpath(buf, n, fmt, args);
ret = vsnpath(buf, n, fmt, args);
va_end(args);
return buf;
return ret;
}

char *git_pathdup(const char *fmt, ...)
{
char path[PATH_MAX];
char path[PATH_MAX], *ret;
va_list args;
va_start(args, fmt);
(void)vsnpath(path, sizeof(path), fmt, args);
ret = vsnpath(path, sizeof(path), fmt, args);
va_end(args);
return xstrdup(path);
return xstrdup(ret);
}

char *mkpathdup(const char *fmt, ...)
Expand Down

0 comments on commit 66a51a9

Please sign in to comment.