+/* use internal functions when OS provided ones are borken */
+#if defined(HAVE_SNPRINTF) && defined(PREFER_PORTABLE_SNPRINTF)
+extern int portable_snprintf(char *str, size_t str_m, const char *fmt, /*args*/ ...);
+extern int portable_vsnprintf(char *str, size_t str_m, const char *fmt, va_list ap);
+#define snprintf portable_snprintf
+#define vsnprintf portable_vsnprintf
+#endif
+
+/* prototype of GNU functions */
+#if defined(__GNUC__)
+extern int asprintf (char **ptr, const char *fmt, /*args*/ ...);
+extern int vasprintf (char **ptr, const char *fmt, va_list ap);
+#endif
+
+extern int asnprintf (char **ptr, size_t str_m, const char *fmt, /*args*/ ...);
+extern int vasnprintf(char **ptr, size_t str_m, const char *fmt, va_list ap);
+
+/*
+ * That's needed to protect solaris's printf from ever seing NULL associated to a %s format
+ * (without adding an extra check on working platforms :)
+ */
+
+#ifdef PRINTF_NULL_WORKING
+# define PRINTF_STR(a) (a)
+#else
+# define PRINTF_STR(a) (a)?:"(null)"
+#endif
+
+/*
+ * What we need to extract the backtrace in exception handling code
+ */
+#ifdef HAVE_EXECINFO_H
+# include <execinfo.h>
+#endif
+
+/****
+ **** Some debugging functions. Can't we find a better place for this??
+ ****/
+void hexa_print(const char*name, unsigned char *data, int size);
+const char *hexa_str(unsigned char *data, int size, int downside);
+
+
+#if defined(WIN32)
+/* Visual C++ does not implements the gettimeofday() function */
+XBT_PUBLIC(int)
+gettimeofday(struct timeval *tv, struct timezone *tz);
+#endif
+
+#define HAVE_SEM_TIMEDWAIT 1
+
+/* mac osx doesn't have the sem_timedwait() function */
+#if defined(__GNUC__) && ( defined(__APPLE_CPP__) || defined(__APPLE_CC__) || defined(__MACOS_CLASSIC__) )
+#
+# undef HAVE_SEM_TIMEDWAIT
+#
+#endif
+