AC_CHECK_HEADERS([libgen.h])
AC_CHECK_HEADERS([netdb.h])
AC_CHECK_HEADERS([signal.h])
+AC_CHECK_HEADERS([stdarg.h])
AC_CHECK_HEADERS([stdint.h])
AC_CHECK_HEADERS([stdio.h])
AC_CHECK_HEADERS([stdlib.h])
AC_CHECK_FUNCS([mmap])
AC_CHECK_FUNCS([mprotect])
AC_CHECK_FUNCS([open])
+AC_CHECK_FUNCS([printf])
AC_CHECK_FUNCS([read])
AC_CHECK_FUNCS([readlink])
AC_CHECK_FUNCS([realloc])
AC_CHECK_FUNCS([strncmp])
AC_CHECK_FUNCS([strstr])
AC_CHECK_FUNCS([time])
+AC_CHECK_FUNCS([va_end])
+AC_CHECK_FUNCS([va_start])
AC_CHECK_FUNCS([write])
#include "config.h"
-/* NOTE: In this file we check for all system headers, because we wrap
- all system calls into inline functions for better portability. */
+// NOTE: In this file we check for all system headers, because we wrap
+// all system calls into inline functions for better portability.
+
+// Please don't include CACAO headers here as this header should be a
+// very low-level one.
#if defined(HAVE_DIRENT_H)
# include <dirent.h>
# include <signal.h>
#endif
+#if defined(HAVE_STDARG_H)
+# include <stdarg.h>
+#endif
+
#if defined(HAVE_STDINT_H)
# include <stdint.h>
#endif
static inline void* dlsym(void* handle, const char* symbol);
static inline int fclose(FILE* fp);
static inline FILE* fopen(const char* path, const char* mode);
+ static inline int fprintf(FILE* stream, const char* format, ...);
static inline size_t fread(void* ptr, size_t size, size_t nmemb, FILE* stream);
static inline void free(void* ptr);
static inline char* getenv(const char* name);
};
-// Includes.
-#include "toolbox/logging.h"
-
-
inline void os::abort(void)
{
#if defined(HAVE_ABORT)
#if defined(HAVE_BACKTRACE)
return ::backtrace(array, size);
#else
- log_println("os::backtrace: Not available.");
+ fprintf(stderr, "os::backtrace: Not available.");
return 0;
#endif
}
#if defined(HAVE_BACKTRACE_SYMBOLS)
return ::backtrace_symbols(array, size);
#else
- log_println("os::backtrace_symbols: Not available.");
+ fprintf(stderr, "os::backtrace_symbols: Not available.");
return NULL;
#endif
}
#endif
}
+inline int os::fprintf(FILE* stream, const char* format, ...)
+{
+#if defined(HAVE_FPRINTF)
+ va_list ap;
+ va_start(ap, format);
+ int result = ::fprintf(stream, format, ap);
+ va_end(ap);
+ return result;
+#else
+# error fprintf not available
+#endif
+}
+
inline size_t os::fread(void* ptr, size_t size, size_t nmemb, FILE* stream)
{
#if defined(HAVE_FREAD)