* configure.ac (AC_CHECK_HEADERS): Added stdarg.h.
authorChristian Thalinger <twisti@complang.tuwien.ac.at>
Mon, 25 Aug 2008 13:32:54 +0000 (15:32 +0200)
committerChristian Thalinger <twisti@complang.tuwien.ac.at>
Mon, 25 Aug 2008 13:32:54 +0000 (15:32 +0200)
(AC_CHECK_FUNCS): Added printf, va_end, and va_start.
* src/vm/os.hpp [HAVE_STDARG_H] (stdarg.h): Added.
(toolbox/logging.h): Removed.
(os): Added fprintf.
(os::backtrace): Use fprintf instead of log_println.
(os::backtrace_symbols): Likewise.
(os::fprintf): New function.

configure.ac
src/vm/os.hpp

index ebc4fe33131acba884db84304e36216db92105ca..9f76066eb93a193b9f6189d2f724dd386e357001 100644 (file)
@@ -259,6 +259,7 @@ AC_CHECK_HEADERS([fcntl.h])
 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])
@@ -343,6 +344,7 @@ AC_CHECK_FUNCS([memset])
 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])
@@ -365,6 +367,8 @@ AC_CHECK_FUNCS([strlen])
 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])
 
 
index dd6377ddab6b169f6e3b36955bd006bb2e9d6787..e8bc08fad54abeda86564340f338572afff2b19f 100644 (file)
 
 #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
@@ -123,6 +130,7 @@ public:
        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);
@@ -157,10 +165,6 @@ public:
 };
 
 
-// Includes.
-#include "toolbox/logging.h"
-
-
 inline void os::abort(void)
 {
 #if defined(HAVE_ABORT)
@@ -202,7 +206,7 @@ inline int os::backtrace(void** array, int size)
 #if defined(HAVE_BACKTRACE)
        return ::backtrace(array, size);
 #else
-       log_println("os::backtrace: Not available.");
+       fprintf(stderr, "os::backtrace: Not available.");
        return 0;
 #endif
 }
@@ -212,7 +216,7 @@ inline char** os::backtrace_symbols(void* const* array, int size) throw ()
 #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
 }
@@ -309,6 +313,19 @@ inline FILE* os::fopen(const char* path, const char* mode)
 #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)