From: nguyenhu@minatec.inpg.fr Date: Mon, 11 Jun 2012 22:59:49 GMT Subject: Re: [PATCHv6 1/4] Read (but not write) from $XDG_CONFIG_HOME/git/config file Message-ID: <20120612005949.Horde.2Iy7T3wdC4BP1nhlOdxxKdA@webmail.minatec.grenoble-inp.fr> In-Reply-To: <20120611185311.Horde.RALabXwdC4BP1iJ3aQ-w89A@webmail.minatec.grenoble-inp.fr> nguyenhu@minatec.inpg.fr a écrit : > Junio C Hamano a écrit : > >> Erik Faye-Lund 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. 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.