]> git.ipfire.org Git - thirdparty/git.git/blobdiff - strbuf.c
strbuf: add strbuf_getcwd()
[thirdparty/git.git] / strbuf.c
index ee96dcfb816625436582833d812a7156513d5d39..f3af203ec7ee5dab1f049118919250229576f559 100644 (file)
--- a/strbuf.c
+++ b/strbuf.c
@@ -398,6 +398,27 @@ int strbuf_readlink(struct strbuf *sb, const char *path, size_t hint)
        return -1;
 }
 
+int strbuf_getcwd(struct strbuf *sb)
+{
+       size_t oldalloc = sb->alloc;
+       size_t guessed_len = 128;
+
+       for (;; guessed_len *= 2) {
+               strbuf_grow(sb, guessed_len);
+               if (getcwd(sb->buf, sb->alloc)) {
+                       strbuf_setlen(sb, strlen(sb->buf));
+                       return 0;
+               }
+               if (errno != ERANGE)
+                       break;
+       }
+       if (oldalloc == 0)
+               strbuf_release(sb);
+       else
+               strbuf_reset(sb);
+       return -1;
+}
+
 int strbuf_getwholeline(struct strbuf *sb, FILE *fp, int term)
 {
        int ch;