Re: [PATCHv6 1/4] Read (but not write) from $XDG_CONFIG_HOME/git/config file
- From
Erik Faye-Lund <kusmabite@gmail.com>
- Date
- Jun 10, 2012, 18:44 UTC
- Message-ID
- <CABPQNSYd0hCU8nrfKJJjR+T_jQn4WC6jEaSCJPjKsuPdumEdtw@mail.gmail.com>
- In-Reply-To
- <20120610154850.Horde.gYrJO3wdC4BP1KXCOvLEiCA@webmail.minatec.grenoble-inp.fr>
On Sun, Jun 10, 2012 at 3:48 PM, <nguyenhu@minatec.inpg.fr> wrote:
Show 41 quoted lines
>
> Junio C Hamano <gitster@pobox.com> 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.