mirror of
https://github.com/git/git
synced 2024-08-27 11:39:22 +00:00
path.c: Don't discard the return value of vsnpath()
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>
This commit is contained in:
parent
5b3b8fa2ab
commit
66a51a9aae
11
path.c
11
path.c
|
@ -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, ...)
|
||||
|
|
Loading…
Reference in a new issue