#ifndef TOKU_PORTABILITY_H #define TOKU_PORTABILITY_H // Tokutek portability layer #if defined __cplusplus extern "C" { #endif #if defined(_MSC_VER) || (defined(__INTEL_COMPILER) && defined(__ICL)) #define TOKU_WINDOWS 1 #define DEV_NULL_FILE "NUL" #else #define TOKU_WINDOWS 0 #define DEV_NULL_FILE "/dev/null" #endif #if TOKU_WINDOWS // Windows #if defined(__ICL) #define __attribute__(x) /* Nothing */ #endif #include "toku_stdint.h" #ifndef TOKU_OFF_T_DEFINED #define TOKU_OFF_T_DEFINED typedef int64_t toku_off_t; #endif #include #include #include "unistd.h" #include "misc.h" #include "toku_pthread.h" #define UNUSED_WARNING(a) a=a /* To make up for missing attributes */ #elif defined(__INTEL_COMPILER) #if defined(__ICC) // Intel linux #include #include #include #include #endif #elif defined(__GNUC__) // GCC linux #include #include #include #include #include #if __FreeBSD__ #include #endif #else #error Not ICC and not GNUC. What compiler? #endif #ifndef TOKU_OFF_T_DEFINED #define TOKU_OFF_T_DEFINED typedef int64_t toku_off_t; #endif #include "toku_os.h" #include "toku_htod.h" #define UU(x) x __attribute__((__unused__)) // Deprecated functions. #if !defined(TOKU_ALLOW_DEPRECATED) # if defined(__ICL) //Windows Intel Compiler # pragma deprecated (creat, fstat, stat, getpid, syscall, sysconf, mkdir, strdup) # pragma poison off_t # pragma poison pthread_attr_t pthread_t # pragma poison pthread_mutexattr_t pthread_mutex_t # pragma poison pthread_condattr_t pthread_cond_t # pragma poison pthread_rwlockattr_t pthread_rwlock_t # pragma poison timespec # ifndef DONT_DEPRECATE_MALLOC # pragma deprecated (malloc, free, realloc) # endif # else int creat() __attribute__((__deprecated__)); int fstat() __attribute__((__deprecated__)); int stat() __attribute__((__deprecated__)); int getpid(void) __attribute__((__deprecated__)); long int syscall(long int __sysno, ...) __attribute__((__deprecated__)); // Sadly, dlmalloc needs sysconf, and on linux this causes trouble with -combine. So let the warnings show up under windows only. // long int sysconf(int) __attribute__((__deprecated__)); int mkdir() __attribute__((__deprecated__)); // strdup is a macro in some libraries. #undef strdup char* strdup(const char *) __attribute__((__deprecated__)); #undef __strdup char* __strdup(const char *) __attribute__((__deprecated__)); # ifndef DONT_DEPRECATE_MALLOC void *malloc(size_t) __attribute__((__deprecated__)); void free(void*) __attribute__((__deprecated__)); void *realloc(void*, size_t) __attribute__((__deprecated__)); # endif # endif #endif void *os_malloc(size_t); void *os_realloc(void*,size_t); void os_free(void*); ssize_t toku_os_pwrite (int fd, const void *buf, size_t len, toku_off_t off); ssize_t toku_os_write (int fd, const void *buf, size_t len); int toku_set_func_fsync (int (*fsync_function)(int)); int toku_set_func_malloc (void *(*)(size_t)); int toku_set_func_realloc (void *(*)(void*,size_t)); int toku_set_func_free (void (*)(void*)); int toku_set_func_pwrite (ssize_t (*pwrite_fun)(int, const void *, size_t, toku_off_t)); int toku_set_func_write (ssize_t (*pwrite_fun)(int, const void *, size_t)); int toku_portability_init (void); int toku_portability_destroy (void); #if defined __cplusplus }; #endif #endif