summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRené Scharfe <l.s.r@web.de>2017-01-26 17:47:45 (GMT)
committerJunio C Hamano <gitster@pobox.com>2017-01-26 22:51:06 (GMT)
commitb1edb40f255a900154a9e7d34dcb9e0219427bd9 (patch)
treec2a0fc97658e64122f11eb12e9d2bc740457e27b
parentc3808ca6982b0ad7ee9b87eca9b50b9a24ec08b0 (diff)
downloadgit-b1edb40f255a900154a9e7d34dcb9e0219427bd9.zip
git-b1edb40f255a900154a9e7d34dcb9e0219427bd9.tar.gz
git-b1edb40f255a900154a9e7d34dcb9e0219427bd9.tar.bz2
abspath: add absolute_pathdup()
Add a function that returns a buffer containing the absolute path of its argument and a semantic patch for its intended use. It avoids an extra string copy to a static buffer. Signed-off-by: Rene Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--abspath.c7
-rw-r--r--cache.h1
-rw-r--r--contrib/coccinelle/xstrdup_or_null.cocci6
3 files changed, 14 insertions, 0 deletions
diff --git a/abspath.c b/abspath.c
index 2825de8..af82abd 100644
--- a/abspath.c
+++ b/abspath.c
@@ -152,6 +152,13 @@ const char *absolute_path(const char *path)
return sb.buf;
}
+char *absolute_pathdup(const char *path)
+{
+ struct strbuf sb = STRBUF_INIT;
+ strbuf_add_absolute_path(&sb, path);
+ return strbuf_detach(&sb, NULL);
+}
+
/*
* Unlike prefix_path, this should be used if the named file does
* not have to interact with index entry; i.e. name of a random file
diff --git a/cache.h b/cache.h
index 1ec9021..f481e61 100644
--- a/cache.h
+++ b/cache.h
@@ -1033,6 +1033,7 @@ int is_directory(const char *);
const char *real_path(const char *path);
const char *real_path_if_valid(const char *path);
const char *absolute_path(const char *path);
+char *absolute_pathdup(const char *path);
const char *remove_leading_path(const char *in, const char *prefix);
const char *relative_path(const char *in, const char *prefix, struct strbuf *sb);
int normalize_path_copy_len(char *dst, const char *src, int *prefix_len);
diff --git a/contrib/coccinelle/xstrdup_or_null.cocci b/contrib/coccinelle/xstrdup_or_null.cocci
index 3fceef1..8e05d1c 100644
--- a/contrib/coccinelle/xstrdup_or_null.cocci
+++ b/contrib/coccinelle/xstrdup_or_null.cocci
@@ -5,3 +5,9 @@ expression V;
- if (E)
- V = xstrdup(E);
+ V = xstrdup_or_null(E);
+
+@@
+expression E;
+@@
+- xstrdup(absolute_path(E))
++ absolute_pathdup(E)