X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=win32%2Fwin32.h;h=4e73a23fe67aeaffae7b7192ca2a56919fd9c638;hb=dd629d5bb3bd7014585b7aad3c6715a5011673bc;hp=d447f2bb07d04ba91e6e52170c9d16d0377561d7;hpb=682fc664ee45afb274c9c458c0386b897c881a4b;p=p5sagit%2Fp5-mst-13.2.git diff --git a/win32/win32.h b/win32/win32.h index d447f2b..4e73a23 100644 --- a/win32/win32.h +++ b/win32/win32.h @@ -75,6 +75,7 @@ #include #include #include +#include #ifndef EXT #include "EXTERN.h" #endif @@ -130,9 +131,11 @@ struct utsname { * facilities for accessing the same. See note in util.c/my_setenv(). */ /*#define USE_WIN32_RTL_ENV */ -/* Define USE_FIXED_OSFHANDLE to fix VC's _open_osfhandle() on W95. - * Can only enable it if not using the DLL CRT (it doesn't expose internals) */ -#if defined(_MSC_VER) && !defined(_DLL) && defined(_M_IX86) +/* Define USE_FIXED_OSFHANDLE to fix MSVCRT's _open_osfhandle() on W95. + It now uses some black magic to work seamlessly with the DLL CRT and + works with MSVC++ 4.0+ or GCC/Mingw32 + -- BKS 1-24-2000 */ +#if (defined(_M_IX86) && _MSC_VER >= 1000) || defined(__MINGW32__) #define USE_FIXED_OSFHANDLE #endif @@ -161,6 +164,7 @@ struct utsname { #define _access access #define _chdir chdir #define _getpid getpid +#define wcsicmp _wcsicmp #include #ifndef DllMain @@ -230,7 +234,7 @@ typedef long gid_t; /* compatibility stuff for other compilers goes here */ -#if !defined(PERL_OBJECT) && defined(PERL_MEMBER_PTR_SIZE) +#if !defined(PERL_OBJECT) && defined(PERL_CAPI) && defined(PERL_MEMBER_PTR_SIZE) # define STRUCT_MGVTBL_DEFINITION \ struct mgvtbl { \ union { \ @@ -266,7 +270,7 @@ struct mgvtbl { \ U8 op_flags; \ U8 op_private; -#endif /* !PERL_OBJECT && PERL_MEMBER_PTR_SIZE */ +#endif /* !PERL_OBJECT && PERL_CAPI && PERL_MEMBER_PTR_SIZE */ START_EXTERN_C @@ -297,6 +301,14 @@ DllExport int RunPerl(int argc, char **argv, char **env); DllExport bool SetPerlInterpreter(void* interp); DllExport void* GetPerlInterpreter(void); +typedef struct { + HANDLE childStdIn; + HANDLE childStdOut; + HANDLE childStdErr; +} child_IO_table; + +DllExport void win32_get_child_IO(child_IO_table* ptr); + #ifndef USE_SOCKETS_AS_HANDLES extern FILE * my_fdopen(int, char *); #endif @@ -419,13 +431,17 @@ struct interp_intern { /* Use CP_ACP when mode is ANSI */ /* Use CP_UTF8 when mode is UTF8 */ -#define A2WHELPER(lpa, lpw, nBytes)\ - lpw[0] = 0, MultiByteToWideChar((IN_UTF8) ? CP_UTF8 : CP_ACP, 0, lpa, -1, lpw, (nBytes/sizeof(WCHAR))) +#define A2WHELPER_LEN(lpa, alen, lpw, nBytes)\ + (lpw[0] = 0, MultiByteToWideChar((IN_BYTE) ? CP_ACP : CP_UTF8, 0, \ + lpa, alen, lpw, (nBytes/sizeof(WCHAR)))) +#define A2WHELPER(lpa, lpw, nBytes) A2WHELPER_LEN(lpa, -1, lpw, nBytes) -#define W2AHELPER(lpw, lpa, nChars)\ - lpa[0] = '\0', WideCharToMultiByte((IN_UTF8) ? CP_UTF8 : CP_ACP, 0, lpw, -1, (LPSTR)lpa, nChars, NULL, NULL) +#define W2AHELPER_LEN(lpw, wlen, lpa, nChars)\ + (lpa[0] = '\0', WideCharToMultiByte((IN_BYTE) ? CP_ACP : CP_UTF8, 0, \ + lpw, wlen, (LPSTR)lpa, nChars,NULL,NULL)) +#define W2AHELPER(lpw, lpa, nChars) W2AHELPER_LEN(lpw, -1, lpa, nChars) -#define USING_WIDE() (PerlEnv_os_id() == VER_PLATFORM_WIN32_NT) +#define USING_WIDE() (PL_widesyscalls && PerlEnv_os_id() == VER_PLATFORM_WIN32_NT) #ifdef USE_ITHREADS # define PERL_WAIT_FOR_CHILDREN \