| 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) { |