path: root/strbuf.h
diff options
authorRené Scharfe <>2017-02-25 16:00:33 (GMT)
committerJunio C Hamano <>2017-02-27 19:02:06 (GMT)
commit33ad9ddd0b5398063f0aabea639b5fe569f458ea (patch)
tree9dcbafba9ded540f034e2697bf47198f4f217036 /strbuf.h
parent3f64699ffde6cd2152db2106505a2310601a207f (diff)
strbuf: add strbuf_add_real_path()
Add a function for appending the canonized absolute pathname of a given path to a strbuf. It keeps the existing contents intact, as expected of a function of the strbuf_add() family, while avoiding copying the result if the given strbuf is empty. It's more consistent with the rest of the strbuf API than strbuf_realpath(), which it's wrapping. Also add a semantic patch demonstrating its intended usage and apply it to the current tree. Using strbuf_add_real_path() instead of calling strbuf_addstr() and real_path() avoids an extra copy to a static buffer. Signed-off-by: Rene Scharfe <> Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'strbuf.h')
1 files changed, 14 insertions, 0 deletions
diff --git a/strbuf.h b/strbuf.h
index 2262b12..ab12d39 100644
--- a/strbuf.h
+++ b/strbuf.h
@@ -443,6 +443,20 @@ extern int strbuf_getcwd(struct strbuf *sb);
extern void strbuf_add_absolute_path(struct strbuf *sb, const char *path);
+ * Canonize `path` (make it absolute, resolve symlinks, remove extra
+ * slashes) and append it to `sb`. Die with an informative error
+ * message if there is a problem.
+ *
+ * The directory part of `path` (i.e., everything up to the last
+ * dir_sep) must denote a valid, existing directory, but the last
+ * component need not exist.
+ *
+ * Callers that don't mind links should use the more lightweight
+ * strbuf_add_absolute_path() instead.
+ */
+extern void strbuf_add_real_path(struct strbuf *sb, const char *path);
* Normalize in-place the path contained in the strbuf. See