Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add xbt_basename to the xbt/file module
authorMartin Quinson <martin.quinson@loria.fr>
Sun, 13 Sep 2015 19:49:25 +0000 (21:49 +0200)
committerMartin Quinson <martin.quinson@loria.fr>
Thu, 17 Sep 2015 12:10:28 +0000 (14:10 +0200)
include/xbt/file.h
src/xbt/xbt_os_file.c

index 5920f3a..2b577fb 100644 (file)
@@ -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);
+
 
 /**@}*/
 
index 232ad06..39dff28 100644 (file)
@@ -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
+}