diff options
Diffstat (limited to 'win32/win32.h')
-rw-r--r-- | win32/win32.h | 61 |
1 files changed, 57 insertions, 4 deletions
diff --git a/win32/win32.h b/win32/win32.h index eb5ecd2971..d9ffbfe1a1 100644 --- a/win32/win32.h +++ b/win32/win32.h @@ -159,6 +159,11 @@ struct utsname { # define F_OK 0 #endif +/* for waitpid() */ +#ifndef WNOHANG +# define WNOHANG 1 +#endif + #define PERL_GET_CONTEXT_DEFINED /* Compiler-specific stuff. */ @@ -194,6 +199,8 @@ struct utsname { /* Borland C thinks that a pointer to a member variable is 12 bytes in size. */ #define PERL_MEMBER_PTR_SIZE 12 +#define isnan _isnan + #endif #ifdef _MSC_VER /* Microsoft Visual C++ */ @@ -486,15 +493,61 @@ struct interp_intern { } STMT_END #endif +#if defined(USE_FIXED_OSFHANDLE) || defined(PERL_MSVCRT_READFIX) +#ifdef PERL_CORE + +/* C doesn't like repeat struct definitions */ +#ifndef _CRTIMP +#define _CRTIMP __declspec(dllimport) +#endif + +/* + * Control structure for lowio file handles + */ +typedef struct { + long osfhnd; /* underlying OS file HANDLE */ + char osfile; /* attributes of file (e.g., open in text mode?) */ + char pipech; /* one char buffer for handles opened on pipes */ + int lockinitflag; + CRITICAL_SECTION lock; +} ioinfo; + + +/* + * Array of arrays of control structures for lowio files. + */ +EXTERN_C _CRTIMP ioinfo* __pioinfo[]; + +/* + * Definition of IOINFO_L2E, the log base 2 of the number of elements in each + * array of ioinfo structs. + */ +#define IOINFO_L2E 5 + +/* + * Definition of IOINFO_ARRAY_ELTS, the number of elements in ioinfo array + */ +#define IOINFO_ARRAY_ELTS (1 << IOINFO_L2E) + +/* + * Access macros for getting at an ioinfo struct and its fields from a + * file handle + */ +#define _pioinfo(i) (__pioinfo[(i) >> IOINFO_L2E] + ((i) & (IOINFO_ARRAY_ELTS - 1))) +#define _osfhnd(i) (_pioinfo(i)->osfhnd) +#define _osfile(i) (_pioinfo(i)->osfile) +#define _pipech(i) (_pioinfo(i)->pipech) + +/* since we are not doing a dup2(), this works fine */ +#define _set_osfhnd(fh, osfh) (void)(_osfhnd(fh) = (long)osfh) +#endif +#endif + /* * This provides a layer of functions and macros to ensure extensions will * get to use the same RTL functions as the core. */ #include "win32iop.h" -#ifndef WNOHANG -# define WNOHANG 1 -#endif - #endif /* _INC_WIN32_PERL5 */ |