From 91cf0cdf021568a3124ec4cf06eed261848a43a1 Mon Sep 17 00:00:00 2001 From: oetiker Date: Wed, 23 Nov 2011 08:52:37 +0000 Subject: [PATCH] make rrd_mkdir_p work on bsd* unixes too ... their dirname call works differently ... #305 git-svn-id: svn://svn.oetiker.ch/rrdtool/trunk@2217 a5681a0c-68f1-0310-ab6d-d61299d08faa --- program/src/rrd_utils.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/program/src/rrd_utils.c b/program/src/rrd_utils.c index 3c4930f9..add19c31 100644 --- a/program/src/rrd_utils.c +++ b/program/src/rrd_utils.c @@ -177,23 +177,33 @@ int rrd_mkdir_p(const char *pathname, mode_t mode) return -1; #ifndef _MSC_VER - base_dir = dirname(pathname_copy); + /* the data pointedd too by dirname might change too (bsd) */ + if (NULL == (base_dir = strdup(dirname(pathname_copy)))) { + free(pathname_copy); + return -1; + } #else - _splitpath(pathname_copy, NULL, base_dir, NULL, NULL); + _splitpath(pathname_copy, NULL, base_dir, NULL, NULL); #endif if (0 != rrd_mkdir_p(base_dir, mode)) { int orig_errno = errno; free(pathname_copy); +#ifndef _MSC_VER + free(base_dir); +#endif errno = orig_errno; return -1; } free(pathname_copy); +#ifndef _MSC_VER + free(base_dir); +#endif /* keep errno as set by mkdir() */ #ifdef _MSC_VER - if (0 != mkdir(pathname)) + if (0 != mkdir(pathname)) return -1; #else if (0 != mkdir(pathname, mode)) -- 2.30.2