X-Git-Url: https://git.octo.it/?p=rrdtool.git;a=blobdiff_plain;f=src%2Frrd_utils.c;h=add19c31af61027762f10aa3e658e9e5419a2066;hp=3c4930f93d285d0a500f0d6b8524259ac575a864;hb=0b3205462f58dc3d59fe016563629e0bd03f8ae3;hpb=fd168f7d90fe82bb26a41c5831dc0661f67f3d1a diff --git a/src/rrd_utils.c b/src/rrd_utils.c index 3c4930f..add19c3 100644 --- a/src/rrd_utils.c +++ b/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))