Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix strdup/_strdup detection
[simgrid.git] / include / xbt / sysdep.h
index 4b901a3..f464edd 100644 (file)
@@ -45,12 +45,13 @@ XBT_PUBLIC(void) xbt_abort(void) _XBT_GNUC_NORETURN;
  */
 #define xbt_die(...)                            \
   do {                                          \
-    XBT_LOG_EXTERNAL_CATEGORY(xbt);             \
     XBT_CCRITICAL(xbt, __VA_ARGS__);            \
     xbt_abort();                                \
   } while (0)
 /** @} */
 
+XBT_LOG_EXTERNAL_CATEGORY(xbt);
+
 /* these ones live in str.h, but redeclare them here so that we do
    not need to load the whole str.h and its heavy dependencies */
 #ifndef __USE_GNU               /* do not redeclare existing headers */
@@ -73,7 +74,11 @@ char *xbt_strdup(const char *s)
 {
   char *res = NULL;
   if (s) {
+# if !defined(_XBT_WIN32)
     res = strdup(s);
+# else
+    res = _strdup(s);
+# endif
     if (!res)
       xbt_die("memory allocation error (strdup returned NULL)");
   }
@@ -133,7 +138,11 @@ void *xbt_realloc(void *p, size_t s)
   return res;
 }
 #else                           /* non __GNUC__  */
-#  define xbt_strdup(s)    strdup(s)
+#  if !defined(_XBT_WIN32)
+#    define xbt_strdup(s)    strdup(s)
+#  else
+#    define xbt_strdup(s)    _strdup(s)
+#  endif
 #  define xbt_malloc(n)    malloc(n)
 #  define xbt_malloc0(n)   calloc(n,1)
 #  define xbt_realloc(p,s) realloc(p,s)
@@ -141,7 +150,7 @@ void *xbt_realloc(void *p, size_t s)
 
 /** @brief like free
     @hideinitializer */
-#define xbt_free free           /*nothing specific to do here. A poor valgrind replacement? */
+#define xbt_free(p) free(p) /*nothing specific to do here. A poor valgrind replacement? */
 
 /** @brief like free, but you can be sure that it is a function  */
 XBT_PUBLIC(void) xbt_free_f(void *p);