From 05e9375c76bd02c893870640faacba875a82e27e Mon Sep 17 00:00:00 2001 From: David Flamme Date: Tue, 15 Feb 2011 22:40:18 +0100 Subject: [PATCH] fprintf/vfprintf dependency fix * src/vm/os.hpp: Added vfprintf wrapper removed fprintf wrapper, but kept the availability check * configure.ac: Added vfprintf linker check * src/toolbox/logging.cpp: using os::vfprintf * src/vm/vm.cpp: version Due to a compatibility check of clang 2.7, the decision was made to define that fprintf is mandatory for cacao --- configure.ac | 1 + src/toolbox/logging.cpp | 4 ++-- src/vm/os.hpp | 20 +++++++++++--------- src/vm/vm.cpp | 2 +- 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/configure.ac b/configure.ac index 81da789f9..1eec8efcf 100644 --- a/configure.ac +++ b/configure.ac @@ -341,6 +341,7 @@ AC_CHECK_FUNCS([fclose]) AC_CHECK_FUNCS([fflush]) AC_CHECK_FUNCS([fopen]) AC_CHECK_FUNCS([fprintf]) +AC_CHECK_FUNCS([vfprintf]) AC_CHECK_FUNCS([fread]) AC_CHECK_FUNCS([free]) AC_CHECK_FUNCS([fstat]) diff --git a/src/toolbox/logging.cpp b/src/toolbox/logging.cpp index c38b32b02..1a0575494 100644 --- a/src/toolbox/logging.cpp +++ b/src/toolbox/logging.cpp @@ -109,9 +109,9 @@ void log_start(void) void log_vprint(const char *text, va_list ap) { if (logfile) - vfprintf(logfile, text, ap); + os::vfprintf(logfile, text, ap); else - vfprintf(stdout, text, ap); + os::vfprintf(stdout, text, ap); } diff --git a/src/vm/os.hpp b/src/vm/os.hpp index 752b76364..59e4da54c 100644 --- a/src/vm/os.hpp +++ b/src/vm/os.hpp @@ -1,6 +1,6 @@ /* src/vm/os.hpp - system (OS) functions - Copyright (C) 2007, 2008, 2009, 2010 + Copyright (C) 2007, 2008, 2009, 2010, 2011 CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO Copyright (C) 2008 Theobroma Systems Ltd. @@ -144,7 +144,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 int vfprintf ( FILE * stream, const char * format, va_list arg ); static inline size_t fread(void* ptr, size_t size, size_t nmemb, FILE* stream); static inline void free(void* ptr); static inline char* getcwd(char* buf, size_t size); @@ -342,16 +342,18 @@ inline FILE* os::fopen(const char* path, const char* mode) #endif } -inline int os::fprintf(FILE* stream, const char* format, ...) +//fprintf is mandatory and can't be replaced with an equivalent fast wrapper +#if !defined (HAVE_FPRINTF) +#error fprintf not available +#endif + +inline int os::vfprintf ( FILE * stream, const char * format, va_list arg ) { -#if defined(HAVE_FPRINTF) - va_list ap; - va_start(ap, format); - int result = ::vfprintf(stream, format, ap); - va_end(ap); +#if defined(HAVE_VFPRINTF) + int result = ::vfprintf(stream, format, arg); return result; #else -# error fprintf not available +# error vfrpintf not available #endif } diff --git a/src/vm/vm.cpp b/src/vm/vm.cpp index a4be50fa5..ef1e93dbc 100644 --- a/src/vm/vm.cpp +++ b/src/vm/vm.cpp @@ -542,7 +542,7 @@ static void version(bool opt_exit) puts("java version \""JAVA_VERSION"\""); puts("CACAO version "VERSION_FULL"\n"); - puts("Copyright (C) 1996-2005, 2006, 2007, 2008, 2009, 2010"); + puts("Copyright (C) 1996-2005, 2006, 2007, 2008, 2009, 2010, 2011"); puts("CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO"); puts("This is free software; see the source for copying conditions. There is NO"); puts("warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."); -- 2.25.1