From: Erik Faye-Lund Date: Sun, 10 Jun 2012 18:44:26 GMT Subject: Re: [PATCHv6 1/4] Read (but not write) from $XDG_CONFIG_HOME/git/config file Message-ID: In-Reply-To: <20120610154850.Horde.gYrJO3wdC4BP1KXCOvLEiCA@webmail.minatec.grenoble-inp.fr> On Sun, Jun 10, 2012 at 3:48 PM, wrote: > > Junio C Hamano a écrit : > >>> 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 = strbuf_detach(&sb, NULL); >>> >>>        strbuf_release(&sb); >>>        return path; >>> } >> >> >> I didn't mean to suggest removing the call to clean-up-path >> function.  What I meant was that strbuf_detach() is a way to take >> the ownership of the buffer, so that you do not have to call >> strbuf_release() on it. > > > So with the call to clean-up-path function and without the call to > strbuf_release(), mkpathdup() function becomes : > > > char *mkpathdup(const char *fmt, ...) > { >        struct strbuf sb = STRBUF_INIT; >        va_list args; > >        va_start(args, fmt); >        strbuf_vaddf(&sb, fmt, args); >        va_end(args); > >        return cleanup_path(strbuf_detach(&sb, NULL)); > > } 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.