perlwin-97a_4: win32 environ fix
Gurusamy Sarathy [Sun, 6 Apr 1997 04:31:11 +0000 (23:31 -0500)]
private-msgid: 199704060431.XAA23400@aatma.engin.umich.edu

win32/win32.c
win32/win32io.c
win32/win32io.h
win32/win32iop.h

index 7bb003d..ed24251 100644 (file)
@@ -756,6 +756,12 @@ win32_errno(void)
     return (pIOSubSystem->pfnerrno());
 }
 
+DllExport char ***
+win32_environ(void)
+{
+    return (pIOSubSystem->pfnenviron());
+}
+
 /* the rest are the remapped stdio routines */
 DllExport FILE *
 win32_stderr(void)
index b4f5824..c9cc8e2 100644 (file)
@@ -31,6 +31,12 @@ dummy_errno(void)
     return (&(errno));
 }
 
+static char ***
+dummy_environ(void)
+{
+    return (&(_environ));
+}
+
 /* the rest are the remapped stdio routines */
 static FILE *
 dummy_stderr(void)
@@ -184,6 +190,7 @@ __declspec(dllexport)
 WIN32_IOSUBSYSTEM      win32stdio = {
     12345678L,         /* begin of structure; */
     dummy_errno,       /* (*pfunc_errno)(void); */
+    dummy_environ,     /* (*pfunc_environ)(void); */
     dummy_stdin,       /* (*pfunc_stdin)(void); */
     dummy_stdout,      /* (*pfunc_stdout)(void); */
     dummy_stderr,      /* (*pfunc_stderr)(void); */
index f73eea1..4955973 100644 (file)
@@ -4,6 +4,7 @@
 typedef struct {
 int    signature_begin;
 int *  (*pfnerrno)(void);
+char ***(*pfnenviron)(void);
 FILE*  (*pfnstdin)(void);
 FILE*  (*pfnstdout)(void);
 FILE*  (*pfnstderr)(void);
index d699e03..eadc08f 100644 (file)
@@ -10,6 +10,7 @@
  * function prototypes for our own win32io layer
  */
 EXT int *      win32_errno();
+EXT char ***   win32_environ();
 EXT FILE*      win32_stdin(void);
 EXT FILE*      win32_stdout(void);
 EXT FILE*      win32_stderr(void);
@@ -77,6 +78,7 @@ void *        SetIOSubSystem(void     *piosubsystem);
  */
 #ifndef WIN32IO_IS_STDIO
 #undef errno
+#undef environ
 #undef stderr
 #undef stdin
 #undef stdout
@@ -89,6 +91,7 @@ void *        SetIOSubSystem(void     *piosubsystem);
 #define feof(f)                                win32_feof(f)
 #define ferror(f)                      win32_ferror(f)
 #define errno                          (*win32_errno())
+#define environ                                (*win32_environ())
 #define strerror                       win32_strerror
 
 /*