Use __declspec(thread) var rather tha TslAlloc & co.
[p5sagit/p5-mst-13.2.git] / win32 / win32.h
index 365fe5e..18bf8a2 100644 (file)
 #define  STANDARD_C    1
 #define  DOSISH                1               /* no escaping our roots */
 #define  OP_BINARY     O_BINARY        /* mistake in in pp_sys.c? */
-#define USE_SOCKETS_AS_HANDLES         /* we wanna pretend sockets are FDs */
-/*#define USE_WIN32_RTL_ENV */         /* see note below */
+#define DllExport      __declspec(dllexport)
+#define DllImport      __declspec(dllimport)
 
-/* For UNIX compatibility. */
+/* Define USE_SOCKETS_AS_HANDLES to enable emulation of windows sockets as
+ * real filehandles. XXX Should always be defined (the other version is untested) */
+#define USE_SOCKETS_AS_HANDLES
+
+/* if USE_WIN32_RTL_ENV is not defined, Perl uses direct Win32 calls
+ * to read the environment, bypassing the runtime's (usually broken)
+ * facilities for accessing the same.  See note in util.c/my_setenv(). */
+/*#define USE_WIN32_RTL_ENV */
 
-#ifdef __BORLANDC__
+/* 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
+#endif
+
+#ifndef VER_PLATFORM_WIN32_WINDOWS     /* VC-2.0 headers dont have this */
+#define VER_PLATFORM_WIN32_WINDOWS     1
+#endif
+
+/* Compiler-specific stuff. */
+
+#ifdef __BORLANDC__            /* Microsoft Visual C++ */
 
 #define _access access
 #define _chdir chdir
 
 #else
 
+#ifdef _MSC_VER                        /* Microsoft Visual C++ */
+
 typedef long           uid_t;
 typedef long           gid_t;
+#pragma  warning(disable: 4018 4035 4101 4102 4244 4245 4761)
+
+#endif /* _MSC_VER */
+
+/* compatibility stuff for other compilers goes here */
 
 #endif
 
 START_EXTERN_C
+
+/* For UNIX compatibility. */
+
 extern  uid_t  getuid(void);
 extern  gid_t  getgid(void);
 extern  uid_t  geteuid(void);
@@ -82,91 +111,38 @@ extern  gid_t      getegid(void);
 extern  int    setuid(uid_t uid);
 extern  int    setgid(gid_t gid);
 extern  int    kill(int pid, int sig);
-END_EXTERN_C
 
-extern  char   *staticlinkmodules[];
+#undef  Stat
+#define  Stat          win32_stat
 
-START_EXTERN_C
+#undef   init_os_extras
+#define  init_os_extras Perl_init_os_extras
 
-/* if USE_WIN32_RTL_ENV is not defined, Perl uses direct Win32 calls
- * to read the environment, bypassing the runtime's (usually broken)
- * facilities for accessing the same.  See note in util.c/my_setenv().
- */
+EXT void               Perl_win32_init(int *argcp, char ***argvp);
+EXT void               Perl_init_os_extras(void);
 
-#ifndef USE_WIN32_RTL_ENV
-EXT char *win32_getenv(const char *name);
-#undef getenv
-#define getenv win32_getenv
+#ifndef USE_SOCKETS_AS_HANDLES
+extern FILE *          my_fdopen(int, char *);
 #endif
+extern int             my_fclose(FILE *);
+extern int             do_aspawn(void* really, void ** mark, void ** arglast);
+extern int             do_spawn(char *cmd);
+extern char            do_exec(char *cmd);
+extern char *          win32PerlLibPath(void);
+extern char *          win32SiteLibPath(void);
+extern int             IsWin95(void);
+extern int             IsWinNT(void);
 
-EXT void Perl_win32_init(int *argcp, char ***argvp);
-
-#ifndef USE_SOCKETS_AS_HANDLES
-extern FILE *my_fdopen(int, char *);
-#undef fdopen
-#define fdopen my_fdopen
-#endif /* USE_SOCKETS_AS_HANDLES */
-
-#undef fclose
-#define fclose my_fclose
-
-#undef  pipe           /* win32_pipe() itself calls _pipe() */
-#define  pipe(fd)      win32_pipe((fd), 512, O_BINARY)
-
-#undef  pause
-#define  pause()       sleep((32767L << 16) + 32767)
-
-#undef  times
-#define  times my_times
-
-#undef  alarm
-#define  alarm my_alarm
-
-struct tms {
-       long    tms_utime;
-       long    tms_stime;
-       long    tms_cutime;
-       long    tms_cstime;
-};
-
-extern unsigned int sleep(unsigned int);
-extern char *win32PerlLibPath(void);
-extern char *win32SiteLibPath(void);
-extern int my_times(struct tms *timebuf);
-extern unsigned int my_alarm(unsigned int sec);
-extern int my_flock(int fd, int oper);
-extern int do_aspawn(void* really, void ** mark, void ** arglast);
-extern int do_spawn(char *cmd);
-extern char do_exec(char *cmd);
-extern void init_os_extras(void);
-extern int my_fclose(FILE *);
-extern int IsWin95(void);
-extern int IsWinNT(void);
+extern char *          staticlinkmodules[];
 
 END_EXTERN_C
 
 typedef  char *                caddr_t;        /* In malloc.c (core address). */
 
 /*
- * Extension Library, only good for VC
- */
-
-#define DllExport      __declspec(dllexport)
-#define DllImport      __declspec(dllimport)
-
-/*
  * handle socket stuff, assuming socket is always available
  */
-
 #include <sys/socket.h>
 #include <netdb.h>
 
-#ifdef _MSC_VER
-#pragma  warning(disable: 4018 4035 4101 4102 4244 4245 4761)
-#endif
-
-#ifndef VER_PLATFORM_WIN32_WINDOWS     /* VC-2.0 headers dont have this */
-#define VER_PLATFORM_WIN32_WINDOWS     1
-#endif
-
 #endif /* _INC_WIN32_PERL5 */