Re: [PATCH 1/3] strbuf: add strbuf_add_cwd()
- From
Duy Nguyen <pclouds@gmail.com>
- Date
- Jul 20, 2014, 12:33 UTC
- Message-ID
- <CACsJy8BHJ8UFbnEn6C7FiA2SNvL5hZSZg5iDd6CQPDxt+bUJHQ@mail.gmail.com>
- In-Reply-To
- <53CBA62A.5010800@web.de>
On Sun, Jul 20, 2014 at 6:21 PM, René Scharfe <l.s.r@web.de> wrote:
> +int strbuf_add_cwd(struct strbuf *sb)
> +{
> + size_t oldalloc = sb->alloc;
> + size_t guessed_len = 32;For Linux, I think this is enough to succesfully get cwd in the first pass. Windows' $HOME is usually deep in C:\Users\Blahblah. Maybe increase this to 128? And we probably want to keep the guessed value, so if the first strbuf_add_cwd needs a few rounds to get cwd, the next strbuf_add_cwd() call does not.
Show 17 quoted lines
> +
> + for (;; guessed_len *= 2) {
> + char *cwd;
> +
> + strbuf_grow(sb, guessed_len);
> + cwd = getcwd(sb->buf + sb->len, sb->alloc - sb->len);
> + if (cwd) {
> + strbuf_setlen(sb, sb->len + strlen(cwd));
> + return 0;
> + }
> + if (errno != ERANGE)
> + break;
> + }
> + if (oldalloc == 0)
> + strbuf_release(sb);
> + return -1;
> +}The loop and the following strbuf_release() are correct. But I wonder if it's easier to read if you save getcwd in a separate/local strbuf variable and only concat it to "sb" when you successfully get cwd..
-- Duy