--- IO-AIO/schmorp.h 2010/08/04 14:02:58 1.11 +++ IO-AIO/schmorp.h 2018/02/20 06:05:19 1.18 @@ -3,6 +3,7 @@ /* WARNING * This header file is a shared resource between many modules. + * perl header files MUST already be included. */ #include @@ -51,6 +52,32 @@ # endif #endif +/* use NV for 32 bit perls as it allows larger offsets */ +#if IVSIZE >= 8 +typedef IV VAL64; +# define SvVAL64(sv) SvIV (sv) +# define newSVval64(i64) newSViv (i64) +#else +typedef NV VAL64; +# define SvVAL64(sv) SvNV (sv) +# define newSVval64(i64) newSVnv (i64) +#endif + +/* typemap for the above */ +/* +VAL64 T_VAL64 + +INPUT + +T_VAL64 + $var = ($type)SvVAL64 ($arg); + +OUTPUT + +T_VAL64 + $arg = newSVval64 ($var); +*/ + /* 5.11 */ #ifndef CxHASARGS # define CxHASARGS(cx) (cx)->blk_sub.hasargs @@ -163,7 +190,7 @@ dTHX; HV *st; GV *gvp; - + return (SV *)sv_2cv (cb_sv, &st, &gvp, 0); } @@ -207,7 +234,7 @@ /*****************************************************************************/ /* portable pipe/socketpair */ -#ifdef USE_SOCKETS_AS_HANDLES +#if defined(USE_SOCKETS_AS_HANDLES) || PERL_VERSION_ATLEAST(5,18,0) # define S_TO_HANDLE(x) ((HANDLE)win32_get_osfhandle (x)) #else # define S_TO_HANDLE(x) ((HANDLE)x) @@ -228,7 +255,7 @@ SOCKET listener; SOCKET sock [2] = { -1, -1 }; - if ((listener = socket (AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) + if ((listener = socket (AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) return -1; addr.sin_family = AF_INET; @@ -244,7 +271,7 @@ if (listen (listener, 1)) goto fail; - if ((sock [0] = socket (AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) + if ((sock [0] = socket (AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) goto fail; if (connect (sock [0], (struct sockaddr *)&addr, addr_size)) @@ -279,7 +306,7 @@ closesocket (listener); -#ifdef USE_SOCKETS_AS_HANDLES +#if defined(USE_SOCKETS_AS_HANDLES) || PERL_VERSION_ATLEAST(5,18,0) /* when select isn't winsocket, we also expect socket, connect, accept etc. * to work on fds */ filedes [0] = sock [0]; @@ -332,19 +359,23 @@ #endif -#if __linux && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 7)) -# define SCHMORP_H_HAVE_EVENTFD 1 +#if HAVE_EVENTFD +# include +#else +# if __linux && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 7)) +# define SCHMORP_H_HAVE_EVENTFD 1 /* our minimum requirement is glibc 2.7 which has the stub, but not the header */ -# include -# ifdef __cplusplus +# include +# ifdef __cplusplus extern "C" { -# endif +# endif int eventfd (unsigned int initval, int flags); -# ifdef __cplusplus +# ifdef __cplusplus } +# endif +# else +# define eventfd(initval,flags) -1 # endif -#else -# define eventfd(initval,flags) -1 #endif typedef struct {