+/****
+ **** string handling (parts from http://www.ijs.si/software/snprintf/)
+ ****/
+
+/* prototype of C99 functions */
+#if defined(HAVE_SNPRINTF)
+#include <stdio.h>
+#else
+XBT_PUBLIC(int) snprintf(char *, size_t, const char *, /*args */ ...);
+XBT_PUBLIC(int) vsnprintf(char *, size_t, const char *, va_list);
+#endif
+
+
+/* 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__) && !defined(__cplusplus))
+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);