From 1eb2acd21f33865e5a3b27b5ec3e91a6ccc17ff1 Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Tue, 9 Feb 2016 01:24:15 +0100 Subject: [PATCH] The memory management of dirname is stupid, so be brutal http://stackoverflow.com/questions/26111096/should-i-free-strdup-pointer-after-basename-dirname-in-c --- src/xbt/xbt_os_file.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/xbt/xbt_os_file.c b/src/xbt/xbt_os_file.c index 0de1cd2e4b..2dda1b24bb 100644 --- a/src/xbt/xbt_os_file.c +++ b/src/xbt/xbt_os_file.c @@ -74,7 +74,10 @@ char *xbt_dirname(const char *path) { err = _splitpath_s(path, drive, _MAX_DRIVE, dir, _MAX_DIR, NULL,0, NULL,0); return bprintf("%s%s",drive,dir); #else - return dirname(xbt_strdup(path)); + char *tmp = xbt_strdup(path); + char *res = xbt_strdup(dirname(tmp)); + free(tmp); + return res; #endif } /** @brief Returns the file component of a path (reimplementation of POSIX basename) @@ -89,6 +92,9 @@ char *xbt_basename(const char *path) { err = _splitpath_s(path, NULL,0, NULL,0, file,1024, ext,1024); return bprintf("%s.%s",file,ext); #else - return basename(xbt_strdup(path)); + char *tmp = xbt_strdup(path); + char *res = xbt_strdup(basename(tmp)); + free(tmp); + return res; #endif } -- 2.20.1