From ec7e4e8cc9cae105b82c1274850189c500422da7 Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Sun, 13 Sep 2015 21:49:25 +0200 Subject: [PATCH] Add xbt_basename to the xbt/file module --- include/xbt/file.h | 4 +++- src/xbt/xbt_os_file.c | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/include/xbt/file.h b/include/xbt/file.h index 5920f3ae14..2b577fb579 100644 --- a/include/xbt/file.h +++ b/include/xbt/file.h @@ -23,7 +23,7 @@ SG_BEGIN_DECL() /** @addtogroup XBT_file * @brief File manipulation functions * - * This module redefine some quite classical functions (such as xbt_getline() or xbt_dirname()) for the platforms + * This module redefine some quite classical functions such as xbt_getline() or xbt_dirname() for the platforms * lacking them. * @{ */ @@ -32,6 +32,8 @@ XBT_PUBLIC(ssize_t) xbt_getline(char **lineptr, size_t * n, FILE * stream); /* Our own implementation of dirname, that does not exist on windows */ XBT_PUBLIC(char *) xbt_dirname(const char *path); +XBT_PUBLIC(char *) xbt_basename(const char *path); + /**@}*/ diff --git a/src/xbt/xbt_os_file.c b/src/xbt/xbt_os_file.c index 232ad066ea..39dff2800d 100644 --- a/src/xbt/xbt_os_file.c +++ b/src/xbt/xbt_os_file.c @@ -77,3 +77,18 @@ char *xbt_dirname(const char *path) { return dirname(xbt_strdup(path)); #endif } +/** @brief Returns the file component of a path (reimplementation of POSIX basename) + * + * The argument is never modified, and the returned value must be freed after use. + */ +char *xbt_basename(const char *path) { +#if _MSC_VER + char file[1024]; + char ext[1024] + errno_t err; + err = _splitpath_s(path, NULL,0, NULL,0, file,1024, ext,1024); + return bprintf("%s%s",drive,dir); +#else + return basename(xbt_strdup(path)); +#endif +} -- 2.20.1