From: Martin Quinson Date: Sun, 13 Sep 2015 19:49:25 +0000 (+0200) Subject: Add xbt_basename to the xbt/file module X-Git-Tag: v3_12~187^2~27 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/ec7e4e8cc9cae105b82c1274850189c500422da7 Add xbt_basename to the xbt/file module --- 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 +}