On 01/26, René Scharfe wrote: > 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@xxxxxx> > --- > abspath.c | 7 +++++++ > cache.h | 1 + > contrib/coccinelle/xstrdup_or_null.cocci | 6 ++++++ > 3 files changed, 14 insertions(+) > > diff --git a/abspath.c b/abspath.c > index fce40fddcc..2f0c26e0e2 100644 > --- a/abspath.c > +++ b/abspath.c > @@ -239,6 +239,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 00a029af36..d7b7a8cd7a 100644 > --- a/cache.h > +++ b/cache.h > @@ -1069,6 +1069,7 @@ const char *real_path(const char *path); > const char *real_path_if_valid(const char *path); > char *real_pathdup(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 3fceef132b..8e05d1ca4b 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) > -- > 2.11.0 > These two patches look good to me. -- Brandon Williams