X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=win32%2Fwin32.h;h=c251a315ef5541226ef4c7ad78fc29e2058b998c;hb=87c2f9c4716d6ca80eef0a77058013da1536e87d;hp=841dbc5d3b96ea59dfb14eff4869eab029b63fbd;hpb=00dc2f4f23da07658d2634f904ac3a098aaa4153;p=p5sagit%2Fp5-mst-13.2.git diff --git a/win32/win32.h b/win32/win32.h index 841dbc5..c251a31 100644 --- a/win32/win32.h +++ b/win32/win32.h @@ -10,14 +10,12 @@ #define _INC_WIN32_PERL5 #ifdef PERL_OBJECT -#define ENV_HV_NAME "ENV_HV_NAME" -#define DYNAMIC_ENV_FETCH -#define prime_env_iter() -#ifdef PERL_GLOBAL_STRUCT -#error PERL_GLOBAL_STRUCT cannot be defined with PERL_OBJECT -#endif -#define win32_get_stdlib PerlEnv_lib_path -#define win32_get_sitelib PerlEnv_sitelib_path +# define WIN32IO_IS_STDIO /* don't pull in custom stdio layer */ +# ifdef PERL_GLOBAL_STRUCT +# error PERL_GLOBAL_STRUCT cannot be defined with PERL_OBJECT +# endif +# define win32_get_privlib PerlEnv_lib_path +# define win32_get_sitelib PerlEnv_sitelib_path #endif #ifdef __GNUC__ @@ -33,9 +31,6 @@ typedef long long __int64; #define __declspec(x) #define PERL_GLOBAL_STRUCT #define MULTIPLICITY -#ifndef TLS_OUT_OF_INDEXES -#define TLS_OUT_OF_INDEXES (DWORD)0xFFFFFFFF -#endif #endif /* Define DllExport akin to perl's EXT, @@ -48,7 +43,8 @@ typedef long long __int64; #define DllExport #else #if defined(PERLDLL) || defined(WIN95FIX) -#define DllExport __declspec(dllexport) +#define DllExport +/*#define DllExport __declspec(dllexport)*/ /* noises with VC5+sp3 */ #else #define DllExport __declspec(dllimport) #endif @@ -59,9 +55,12 @@ typedef long long __int64; #ifdef WIN32_LEAN_AND_MEAN /* C file is NOT a Perl5 original. */ #define CONTEXT PERL_CONTEXT /* Avoid conflict of CONTEXT defs. */ -#define index strchr /* Why 'index'? */ #endif /*WIN32_LEAN_AND_MEAN */ +#ifndef TLS_OUT_OF_INDEXES +#define TLS_OUT_OF_INDEXES (DWORD)0xFFFFFFFF +#endif + #include #include #include @@ -112,10 +111,14 @@ struct tms { #define ENV_IS_CASELESS -#ifndef VER_PLATFORM_WIN32_WINDOWS /* VC-2.0 headers dont have this */ +#ifndef VER_PLATFORM_WIN32_WINDOWS /* VC-2.0 headers don't have this */ #define VER_PLATFORM_WIN32_WINDOWS 1 #endif +#ifndef FILE_SHARE_DELETE /* VC-4.0 headers don't have this */ +#define FILE_SHARE_DELETE 0x00000004 +#endif + /* Compiler-specific stuff. */ #ifdef __BORLANDC__ /* Borland C++ */ @@ -138,6 +141,8 @@ struct tms { #pragma warn -csu /* "comparing signed and unsigned values" */ #pragma warn -pro /* "call to function with no prototype" */ +#define USE_RTL_WAIT /* Borland has a working wait() */ + /* Borland is picky about a bare member function name used as its ptr */ #ifdef PERL_OBJECT #define FUNC_NAME_TO_PTR(name) &(name) @@ -151,6 +156,55 @@ typedef long uid_t; typedef long gid_t; #pragma warning(disable: 4018 4035 4101 4102 4244 4245 4761) +#ifndef PERL_OBJECT + +/* Visual C thinks that a pointer to a member variable is 16 bytes in size. */ +#define STRUCT_MGVTBL_DEFINITION \ +struct mgvtbl { \ + union { \ + int (CPERLscope(*svt_get)) _((SV *sv, MAGIC* mg)); \ + char handle_VC_problem1[16]; \ + }; \ + union { \ + int (CPERLscope(*svt_set)) _((SV *sv, MAGIC* mg)); \ + char handle_VC_problem2[16]; \ + }; \ + union { \ + U32 (CPERLscope(*svt_len)) _((SV *sv, MAGIC* mg)); \ + char handle_VC_problem3[16]; \ + }; \ + union { \ + int (CPERLscope(*svt_clear)) _((SV *sv, MAGIC* mg)); \ + char handle_VC_problem4[16]; \ + }; \ + union { \ + int (CPERLscope(*svt_free)) _((SV *sv, MAGIC* mg)); \ + char handle_VC_problem5[16]; \ + }; \ +} + +#define BASEOP_DEFINITION \ + OP* op_next; \ + OP* op_sibling; \ + OP* (CPERLscope(*op_ppaddr))_((ARGSproto)); \ + char handle_VC_problem[12]; \ + PADOFFSET op_targ; \ + OPCODE op_type; \ + U16 op_seq; \ + U8 op_flags; \ + U8 op_private; + +#define UNION_ANY_DEFINITION union any { \ + void* any_ptr; \ + I32 any_i32; \ + IV any_iv; \ + long any_long; \ + void (CPERLscope(*any_dptr)) _((void*)); \ + char handle_VC_problem[16]; \ +} + +#endif /* PERL_OBJECT */ + #endif /* _MSC_VER */ #ifdef __MINGW32__ /* Minimal Gnu-Win32 */ @@ -168,6 +222,13 @@ typedef long gid_t; # endif #endif +#ifndef _O_NOINHERIT +# define _O_NOINHERIT 0x0080 +# ifndef _NO_OLDNAMES +# define O_NOINHERIT _O_NOINHERIT +# endif +#endif + #endif /* __MINGW32__ */ /* compatibility stuff for other compilers goes here */ @@ -206,7 +267,7 @@ extern int do_aspawn(void *really, void **mark, void **sp); extern int do_spawn(char *cmd); extern int do_spawn_nowait(char *cmd); extern char do_exec(char *cmd); -extern char * win32_get_stdlib(char *pl); +extern char * win32_get_privlib(char *pl); extern char * win32_get_sitelib(char *pl); extern int IsWin95(void); extern int IsWinNT(void); @@ -241,6 +302,28 @@ EXT void win32_strip_return(struct sv *sv); #define win32_strip_return(sv) NOOP #endif +#define HAVE_INTERP_INTERN +struct interp_intern { + char * w32_perlshell_tokens; + char ** w32_perlshell_vec; + long w32_perlshell_items; + struct av * w32_fdpid; +#ifndef USE_RTL_WAIT + long w32_num_children; + HANDLE w32_child_pids[MAXIMUM_WAIT_OBJECTS]; +#endif +}; + +#define w32_perlshell_tokens (sys_intern.w32_perlshell_tokens) +#define w32_perlshell_vec (sys_intern.w32_perlshell_vec) +#define w32_perlshell_items (sys_intern.w32_perlshell_items) +#define w32_fdpid (sys_intern.w32_fdpid) + +#ifndef USE_RTL_WAIT +# define w32_num_children (sys_intern.w32_num_children) +# define w32_child_pids (sys_intern.w32_child_pids) +#endif + /* * Now Win32 specific per-thread data stuff */ @@ -254,6 +337,10 @@ struct thread_intern { char Wstrerror_buffer[512]; struct servent Wservent; char Wgetlogin_buffer[128]; + char Ww32_perllib_root[MAX_PATH+1]; +# ifdef USE_SOCKETS_AS_HANDLES + int Winit_socktype; +# endif # ifdef HAVE_DES_FCRYPT char Wcrypt_buffer[30]; # endif