From: Junio C Hamano <hidden> Date: 2016-06-15 22:54:02
Erik Faye-Lund [off-list ref] writes:
The awkward thing about doing this, is that the memory allocated by
the strbuf cannot be reclaimed if you go with this. A pointer that has
been adjusted (like cleanup_path can do) cannot be successfully fed to
free.
Yeah, I wouldn't recommend doing that. Either
path = strbuf_detach(&sb, NULL);
retval = xstrdup(cleanup_path(path));
free(path);
return retval;
or
path = xstrdup(cleanup_path(sb.buf));
strbuf_release(&sb);
return path;
would be more sensible.
The awkward thing about doing this, is that the memory allocated by
the strbuf cannot be reclaimed if you go with this. A pointer that has
been adjusted (like cleanup_path can do) cannot be successfully fed to
free.
Yeah, I wouldn't recommend doing that. Either
path = strbuf_detach(&sb, NULL);
retval = xstrdup(cleanup_path(path));
free(path);
return retval;
or
path = xstrdup(cleanup_path(sb.buf));
strbuf_release(&sb);
return path;
would be more sensible.
Erik, what do you prefer ? You can have the final answer.
The awkward thing about doing this, is that the memory allocated by
the strbuf cannot be reclaimed if you go with this. A pointer that has
been adjusted (like cleanup_path can do) cannot be successfully fed to
free.
Yeah, I wouldn't recommend doing that. Either
path = strbuf_detach(&sb, NULL);
retval = xstrdup(cleanup_path(path));
free(path);
return retval;
or
path = xstrdup(cleanup_path(sb.buf));
strbuf_release(&sb);
return path;
would be more sensible.
In our next patch, mkpathdup() function will be
char *mkpathdup(const char *fmt, ...)
{
char *path;
struct strbuf sb = STRBUF_INIT;
va_list args;
va_start(args, fmt);
strbuf_vaddf(&sb, fmt, args);
va_end(args);
path = xstrdup(cleanup_path(sb.buf));
strbuf_release(&sb);
return path;
}
which looks like our previous proposal with xstrdup()
and cleanup_path() functions at the right place.
From: Erik Faye-Lund <hidden> Date: 2016-06-15 22:54:02
On Mon, Jun 11, 2012 at 6:53 PM, [off-list ref] wrote:
Junio C Hamano [off-list ref] a écrit :
quoted
Erik Faye-Lund [off-list ref] writes:
quoted
The awkward thing about doing this, is that the memory allocated by
the strbuf cannot be reclaimed if you go with this. A pointer that has
been adjusted (like cleanup_path can do) cannot be successfully fed to
free.
Yeah, I wouldn't recommend doing that. Either
path = strbuf_detach(&sb, NULL);
retval = xstrdup(cleanup_path(path));
free(path);
return retval;
or
path = xstrdup(cleanup_path(sb.buf));
strbuf_release(&sb);
return path;
would be more sensible.
Erik, what do you prefer ? You can have the final answer.
I think the latter is the neater one, but I don't really care too much
either way :)