Introduction
Introduction Statistics Contact Development Disclaimer Help
tfix dirname for glibc - stagit - static git page generator
git clone git://src.adamsgaard.dk/stagit
Log
Files
Refs
README
LICENSE
---
commit 9c7e2c56784e353adf143d887d84c0e967dba7b9
parent 1778cba9794bbe5624db907bda2d065c971405b7
Author: Hiltjo Posthuma <[email protected]>
Date: Sat, 26 Dec 2015 12:56:23 +0100
fix dirname for glibc
Diffstat:
M urmoms.c | 29 +++++++++++++++++++++++++++--
1 file changed, 27 insertions(+), 2 deletions(-)
---
diff --git a/urmoms.c b/urmoms.c
t@@ -140,6 +140,27 @@ xmlencode(FILE *fp, const char *s, size_t len)
}
}
+/* Some implementations of dirname(3) return a pointer to a static
+ * internal buffer (OpenBSD). Others modify the contents of `path` (POSIX).
+ * This is a wrapper function that is compatible with both versions.
+ * The program will error out if dirname(3) failed, this can only happen
+ * with the OpenBSD version. */
+char *
+xdirname(const char *path)
+{
+ char *p, *b;
+
+ if (!(p = strdup(path)))
+ err(1, "strdup");
+ if (!(b = dirname(p)))
+ err(1, "basename");
+ if (!(b = strdup(b)))
+ err(1, "strdup");
+ free(p);
+
+ return b;
+}
+
/* Some implementations of basename(3) return a pointer to a static
* internal buffer (OpenBSD). Others modify the contents of `path` (POSIX).
* This is a wrapper function that is compatible with both versions.
t@@ -571,12 +592,16 @@ writeblob(git_object *obj, const char *filename, git_off…
{
char fpath[PATH_MAX];
char tmp[PATH_MAX] = "";
- char *p;
+ char *d, *p;
FILE *fp;
snprintf(fpath, sizeof(fpath), "file/%s.html", filename);
- if (mkdirp(dirname(fpath)))
+ d = xdirname(fpath);
+ if (mkdirp(d)) {
+ free(d);
return 1;
+ }
+ free(d);
p = fpath;
while (*p) {
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.