More cleanups of win32/win32*.[ch] files. win32/win32iop.h now
Gurusamy Sarathy [Wed, 12 Nov 1997 22:26:39 +0000 (22:26 +0000)]
contains the all the declarations and macros for the win32io layer.
New std-ish functions are exported now.  All win32-specific exported
functions begin with "win32_" consistently.  win32 version of
init_os_extras() is now exported, so embedders can get the in-core
xsubs.

p4raw-id: //depot/win32/perl@244

dosish.h
win32/makedef.pl
win32/win32.c
win32/win32.h
win32/win32iop.h
win32/win32sck.c

index 1b251ef..19eb5e8 100644 (file)
--- a/dosish.h
+++ b/dosish.h
@@ -94,12 +94,9 @@ void Perl_DJGPP_init();
 #ifndef WIN32
 #  define Stat(fname,bufptr) stat((fname),(bufptr))
 #else
-#  define Stat(fname,bufptr) win32_stat((fname),(bufptr))
-#  define my_getenv(var)  getenv(var)
 /*
- * the following are standard library calls (stdio in particular)
- * that is being redirected to the perl DLL. This is needed for 
- * Dynaloading any modules that called stdio functions
+ * 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>
 #endif /* WIN32 */
index fd2a99c..abc89d8 100644 (file)
@@ -395,7 +395,11 @@ win32_malloc
 win32_calloc
 win32_realloc
 win32_free
+win32_sleep
+win32_times
+win32_alarm
 win32_open_osfhandle
 win32_get_osfhandle
 Perl_win32_init
+Perl_init_os_extras
 RunPerl
index a73d9e6..4551679 100644 (file)
@@ -575,26 +575,13 @@ ioctl(int i, unsigned int u, char *data)
 }
 #endif
 
-unsigned int
-sleep(unsigned int t)
+DllExport unsigned int
+win32_sleep(unsigned int t)
 {
     Sleep(t*1000);
     return 0;
 }
 
-
-#undef rename
-
-int
-myrename(char *OldFileName, char *newname)
-{
-    if(_access(newname, 0) != -1) {    /* file exists */
-       _unlink(newname);
-    }
-    return rename(OldFileName, newname);
-}
-
-
 DllExport int
 win32_stat(const char *path, struct stat *buffer)
 {
@@ -670,9 +657,8 @@ FileTimeToClock(PFILETIME ft)
  return (long) qw;
 }
 
-#undef times
-int
-my_times(struct tms *timebuf)
+DllExport int
+win32_times(struct tms *timebuf)
 {
     FILETIME user;
     FILETIME kernel;
@@ -705,9 +691,8 @@ static VOID CALLBACK TimerProc(HWND win, UINT msg, UINT id, DWORD time)
  sighandler(14);
 }
 
-#undef alarm
-unsigned int
-my_alarm(unsigned int sec)
+DllExport unsigned int
+win32_alarm(unsigned int sec)
 {
     /* 
      * the 'obvious' implentation is SetTimer() with a callback
@@ -735,14 +720,7 @@ my_alarm(unsigned int sec)
     return 0;
 }
 
-#if defined(_DLL) || !defined(_MSC_VER)
-/* It may or may not be fixed (ok on NT), but DLL runtime
-   does not export the functions used in the workround
-*/
-#define WIN95_OSFHANDLE_FIXED
-#endif
-
-#if defined(_WIN32) && !defined(WIN95_OSFHANDLE_FIXED) && defined(_M_IX86)
+#ifdef USE_FIXED_OSFHANDLE
 
 EXTERN_C int __cdecl _alloc_osfhnd(void);
 EXTERN_C int __cdecl _set_osfhnd(int fh, long value);
@@ -841,20 +819,24 @@ my_open_osfhandle(long osfhandle, int flags)
 }
 
 #define _open_osfhandle my_open_osfhandle
-#endif /* _M_IX86 */
+#endif /* USE_FIXED_OSFHANDLE */
 
 /* simulate flock by locking a range on the file */
 
 #define LK_ERR(f,i)    ((f) ? (i = 0) : (errno = GetLastError()))
 #define LK_LEN         0xffff0000
 
-int
-my_flock(int fd, int oper)
+DllExport int
+win32_flock(int fd, int oper)
 {
     OVERLAPPED o;
     int i = -1;
     HANDLE fh;
 
+    if (!IsWinNT()) {
+       croak("flock() unimplemented on this platform");
+       return -1;
+    }
     fh = (HANDLE)_get_osfhandle(fd);
     memset(&o, 0, sizeof(o));
 
@@ -1014,6 +996,11 @@ win32_fopen(const char *filename, const char *mode)
     return fopen(filename, mode);
 }
 
+#ifndef USE_SOCKETS_AS_HANDLES
+#undef fdopen
+#define fdopen my_fdopen
+#endif
+
 DllExport FILE *
 win32_fdopen( int handle, const char *mode)
 {
@@ -1031,7 +1018,7 @@ win32_freopen( const char *path, const char *mode, FILE *stream)
 DllExport int
 win32_fclose(FILE *pf)
 {
-    return my_fclose(pf);
+    return my_fclose(pf);      /* defined in win32sck.c */
 }
 
 DllExport int
@@ -1356,16 +1343,6 @@ win32_get_osfhandle(int fd)
  * Extras.
  */
 
-DllExport int
-win32_flock(int fd, int oper)
-{
-    if (!IsWinNT()) {
-       croak("flock() unimplemented on this platform");
-       return -1;
-    }
-    return my_flock(fd, oper);
-}
-
 static
 XS(w32_GetCwd)
 {
@@ -1617,7 +1594,7 @@ XS(w32_GetShortPathName)
 }
 
 void
-init_os_extras()
+Perl_init_os_extras()
 {
     char *file = __FILE__;
     dXSUB_SYS;
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 */
index 992eec7..a60194d 100644 (file)
  */
 START_EXTERN_C
 
+struct tms {
+       long    tms_utime;
+       long    tms_stime;
+       long    tms_cutime;
+       long    tms_cstime;
+};
+
 EXT int *      win32_errno(void);
 EXT char ***   win32_environ(void);
 EXT FILE*      win32_stdin(void);
@@ -102,12 +109,18 @@ EXT void* win32_calloc(size_t numitems, size_t size);
 EXT void*      win32_realloc(void *block, size_t size);
 EXT void       win32_free(void *block);
 
-/*
- * these two are win32 specific but still io related
- */
 EXT int                win32_open_osfhandle(long handle, int flags);
 EXT long       win32_get_osfhandle(int fd);
 
+#ifndef USE_WIN32_RTL_ENV
+EXT char*      win32_getenv(const char *name);
+#endif
+
+EXT unsigned int       win32_sleep(unsigned int);
+EXT int                        win32_times(struct tms *timebuf);
+EXT unsigned int       win32_alarm(unsigned int sec);
+EXT int                        win32_flock(int fd, int oper);
+EXT int                        win32_stat(const char *path, struct stat *buf);
 
 END_EXTERN_C
 
@@ -123,6 +136,11 @@ END_EXTERN_C
 #undef ferror
 #undef feof
 #undef fclose
+#undef pipe
+#undef pause
+#undef sleep
+#undef times
+#undef alarm
 
 #ifdef __BORLANDC__
 #undef ungetc
@@ -205,6 +223,17 @@ END_EXTERN_C
 #define calloc                 win32_calloc
 #define realloc                        win32_realloc
 #define free                   win32_free
-#endif /* WIN32IO_IS_STDIO */
 
+#define pipe(fd)               win32_pipe((fd), 512, O_BINARY)
+#define pause()                        win32_sleep((32767L << 16) + 32767)
+#define sleep                  win32_sleep
+#define times                  win32_times
+#define alarm                  win32_alarm
+
+#ifndef USE_WIN32_RTL_ENV
+#undef getenv
+#define getenv win32_getenv
+#endif
+
+#endif /* WIN32IO_IS_STDIO */
 #endif /* WIN32IOP_H */
index 9de7a14..b4f40f0 100644 (file)
@@ -132,8 +132,9 @@ start_sockets(void)
 
 
 #ifndef USE_SOCKETS_AS_HANDLES
+#undef fdopen
 FILE *
-myfdopen(int fd, char *mode)
+my_fdopen(int fd, char *mode)
 {
     FILE *fp;
     char sockbuf[256];