From: "René Scharfe" <l.s.r@web.de>
To: Git Mailing List <git@vger.kernel.org>
Cc: "Karsten Blees" <karsten.blees@gmail.com>,
"Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>,
"Junio C Hamano" <gitster@pobox.com>
Subject: [PATCH 1/3] strbuf: add strbuf_add_cwd()
Date: Sun, 20 Jul 2014 13:21:14 +0200 [thread overview]
Message-ID: <53CBA62A.5010800@web.de> (raw)
In-Reply-To: <53CBA59C.8050901@web.de>
Add strbuf_add_cwd(), which adds the current working directory to a
strbuf. Because it doesn't use a fixed-size buffer it supports
arbitrarily long paths, as long as the platform's getcwd() does as
well. At least on Linux and FreeBSD it handles paths longer than
PATH_MAX just fine.
Suggested-by: Karsten Blees <karsten.blees@gmail.com>
Signed-off-by: Rene Scharfe <l.s.r@web.de>
---
Documentation/technical/api-strbuf.txt | 4 ++++
strbuf.c | 22 ++++++++++++++++++++++
strbuf.h | 1 +
3 files changed, 27 insertions(+)
diff --git a/Documentation/technical/api-strbuf.txt b/Documentation/technical/api-strbuf.txt
index f9c06a7..b96b78c 100644
--- a/Documentation/technical/api-strbuf.txt
+++ b/Documentation/technical/api-strbuf.txt
@@ -257,6 +257,10 @@ which can be used by the programmer of the callback as she sees fit.
Add a formatted string to the buffer.
+`strbuf_add_cwd`::
+
+ Add the current working directory to the buffer.
+
`strbuf_commented_addf`::
Add a formatted string prepended by a comment character and a
diff --git a/strbuf.c b/strbuf.c
index 33018d8..4e44773 100644
--- a/strbuf.c
+++ b/strbuf.c
@@ -406,6 +406,28 @@ int strbuf_readlink(struct strbuf *sb, const char *path, size_t hint)
return -1;
}
+int strbuf_add_cwd(struct strbuf *sb)
+{
+ size_t oldalloc = sb->alloc;
+ size_t guessed_len = 32;
+
+ 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;
+}
+
int strbuf_getwholeline(struct strbuf *sb, FILE *fp, int term)
{
int ch;
diff --git a/strbuf.h b/strbuf.h
index a7c0192..ba95cd6 100644
--- a/strbuf.h
+++ b/strbuf.h
@@ -174,6 +174,7 @@ extern size_t strbuf_fread(struct strbuf *, size_t, FILE *);
extern ssize_t strbuf_read(struct strbuf *, int fd, size_t hint);
extern int strbuf_read_file(struct strbuf *sb, const char *path, size_t hint);
extern int strbuf_readlink(struct strbuf *sb, const char *path, size_t hint);
+extern int strbuf_add_cwd(struct strbuf *sb);
extern int strbuf_getwholeline(struct strbuf *, FILE *, int);
extern int strbuf_getline(struct strbuf *, FILE *, int);
--
2.0.2
next prev parent reply other threads:[~2014-07-20 11:21 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-20 11:18 [PATCH 0/3] getcwd without PATH_MAX René Scharfe
2014-07-20 11:21 ` René Scharfe [this message]
2014-07-20 12:33 ` [PATCH 1/3] strbuf: add strbuf_add_cwd() Duy Nguyen
2014-07-20 15:21 ` René Scharfe
2014-07-20 11:21 ` [PATCH 2/3] wrapper: add xgetcwd() René Scharfe
2014-07-20 12:35 ` Duy Nguyen
2014-07-20 15:22 ` René Scharfe
2014-07-20 11:22 ` [PATCH 3/3] use xgetcwd() get the current directory or die René Scharfe
2014-07-20 12:45 ` Duy Nguyen
2014-07-20 15:21 ` René Scharfe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=53CBA62A.5010800@web.de \
--to=l.s.r@web.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=karsten.blees@gmail.com \
--cc=pclouds@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.