X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=include%2FHsBase.h;h=2e101ddd65154500fd9dd68907e8eeaf7ed527c3;hb=30464c0cb915c2ae900909568fa8677bba341e45;hp=935da37399c32a58efe093787ae5ae05c0886e15;hpb=fd21ca02e14685bdbb5c247202dc538f8c20a729;p=haskell-directory.git diff --git a/include/HsBase.h b/include/HsBase.h index 935da37..2e101dd 100644 --- a/include/HsBase.h +++ b/include/HsBase.h @@ -20,6 +20,11 @@ #undef PACKAGE_TARNAME #undef PACKAGE_VERSION +/* Needed to get the macro version of errno on some OSs (eg. Solaris). + We must do this, because these libs are only compiled once, but + must work in both single-threaded and multi-threaded programs. */ +#define _REENTRANT 1 + #include "HsFFI.h" #include @@ -95,6 +100,11 @@ #if HAVE_WCTYPE_H #include #endif +#if HAVE_INTTYPES_H +# include +#elif HAVE_STDINT_H +# include +#endif #if !defined(mingw32_HOST_OS) && !defined(irix_HOST_OS) # if HAVE_SYS_RESOURCE_H @@ -448,14 +458,6 @@ __hscore_PrelHandle_recv( HsInt fd, HsAddr ptr, HsInt off, int sz ) #endif /* __GLASGOW_HASKELL__ */ -#if defined(mingw32_HOST_OS) || defined(_MSC_VER) -INLINE long * -__hscore_Time_ghcTimezone( void ) { return &_timezone; } - -INLINE char ** -__hscore_Time_ghcTzname( void ) { return _tzname; } -#endif - INLINE HsInt __hscore_mkdir( HsAddr pathName, HsInt mode ) { @@ -700,6 +702,7 @@ INLINE int __hscore_fstat(int fd, struct stat *buf) { // select-related stuff #if !defined(mingw32_HOST_OS) +INLINE int hsFD_SETSIZE(void) { return FD_SETSIZE; } INLINE void hsFD_CLR(int fd, fd_set *fds) { FD_CLR(fd, fds); } INLINE int hsFD_ISSET(int fd, fd_set *fds) { return FD_ISSET(fd, fds); } INLINE void hsFD_SET(int fd, fd_set *fds) { FD_SET(fd, fds); } @@ -764,5 +767,11 @@ INLINE unsigned int __hscore_get_osver(void) { return _osver; } extern char** environ; INLINE char **__hscore_environ() { return environ; } +/* lossless conversions between pointers and integral types */ +INLINE void * __hscore_from_uintptr(uintptr_t n) { return (void *)n; } +INLINE void * __hscore_from_intptr (intptr_t n) { return (void *)n; } +INLINE uintptr_t __hscore_to_uintptr (void *p) { return (uintptr_t)p; } +INLINE intptr_t __hscore_to_intptr (void *p) { return (intptr_t)p; } + #endif /* __HSBASE_H__ */