/* src/vm/os.hpp - system (OS) functions
- Copyright (C) 2007, 2008, 2009
+ Copyright (C) 2007, 2008, 2009, 2010, 2011
CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
Copyright (C) 2008 Theobroma Systems Ltd.
# include <unistd.h>
#endif
+#if defined(__DARWIN__)
+# if defined(HAVE_MACH_MACH_H)
+# include <mach/mach.h>
+# endif
+#endif
+
#if defined(HAVE_SYS_LOADAVG_H)
# include <sys/loadavg.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 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);
static int processors_online();
// Template helper
- template<class F1, class F2>
- static int call_scandir(int (*scandir)(const char *, struct dirent ***, F1, F2), const char *dir, struct dirent ***namelist, int(*filter)(const struct dirent *), int(*compar)(const void *, const void *));
+ template<class _F1, class _F2>
+ static int call_scandir(int (*scandir)(const char *, struct dirent ***, _F1, _F2), const char *dir, struct dirent ***namelist, int(*filter)(const struct dirent *), int(*compar)(const void *, const void *));
};
#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
}
#endif
}
-template<class F1, class F2>
-inline int os::call_scandir(int (*scandir)(const char *, struct dirent ***, F1, F2), const char *dir, struct dirent ***namelist, int(*filter)(const struct dirent *), int(*compar)(const void *, const void *))
+template<class _F1, class _F2>
+inline int os::call_scandir(int (*scandir)(const char *, struct dirent ***, _F1, _F2), const char *dir, struct dirent ***namelist, int(*filter)(const struct dirent *), int(*compar)(const void *, const void *))
{
- return scandir(dir, namelist, (F1) filter, (F2) compar);
+ return scandir(dir, namelist, (_F1) filter, (_F2) compar);
}
inline int os::scandir(const char *dir, struct dirent ***namelist, int(*filter)(const struct dirent *), int(*compar)(const void *, const void *))