Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Define a wrapper to strings for when printf(%s,NULL) segfaults
[simgrid.git] / src / portable.h
index 15fc63d..bd7c397 100644 (file)
 
 #include "gras_config.h"
 
-#include <errno.h>
-#include <sys/time.h> /* struct timeval */
-#include <sys/types.h>
+#ifdef HAVE_ERRNO_H
+#  include <errno.h>
+#endif
+
+#ifdef HAVE_UNISTD_H
+#  include <unistd.h>
+#endif
 
 /****
  **** Networking 
@@ -87,14 +91,18 @@ const char *gras_wsa_err2string(int errcode);
 #include <fcntl.h>
 
 #ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
+#  include <sys/stat.h>
+#endif
+
+#ifndef O_BINARY
+#  define O_BINARY 0
 #endif
 
 /****
  **** Time handling
  ****/
 
-#if TIME_WITH_SYS_TIME
+#ifdef TIME_WITH_SYS_TIME
 # include <sys/time.h>
 # include <time.h>
 #else
@@ -109,5 +117,30 @@ const char *gras_wsa_err2string(int errcode);
 #define sleep _sleep /* else defined in stdlib.h */
 #endif
 
+/****
+ **** Contexts
+ ****/
+
+#ifdef HAVE_UCONTEXT_H
+# ifndef S_SPLINT_S /* This header drives splint into the wall */
+#   include <ucontext.h>
+# endif 
+#endif
+
+#ifdef _WIN32
+#  include "xbt/context_win32.h" /* Manual reimplementation for prehistoric platforms */
+#endif
+
+/**
+ ** What is needed to protect solaris's printf from ever seing NULL associated to a %s format
+ ** (without adding an extra check on linux :)
+ **/
+
+#ifdef PRINTF_NULL_WORKING
+#  define PRINTF_STR(a) (a)
+#else
+#  define PRINTF_STR(a) (a)?:"(null)"
+#endif
+  
 
 #endif /* GRAS_PORTABLE_H */