summaryrefslogtreecommitdiff
path: root/win32
diff options
context:
space:
mode:
authorGurusamy Sarathy <gsar@cpan.org>2000-10-09 18:46:54 +0000
committerGurusamy Sarathy <gsar@cpan.org>2000-10-09 18:46:54 +0000
commita10b7b7eee64efea010bfdba91243503341ba68d (patch)
treec315197cd8aec67ebf6d490e93848a5b39ed8dc0 /win32
parent9afd7f9460d27680225b1fcfc96bc64f179140fc (diff)
downloadperl-a10b7b7eee64efea010bfdba91243503341ba68d.tar.gz
on Windows, avoid potential exception (could happen if MSVCRT isn't
being used) when closing a socket handle p4raw-id: //depot/perl@7173
Diffstat (limited to 'win32')
-rw-r--r--win32/win32.c51
-rw-r--r--win32/win32.h50
-rw-r--r--win32/win32sck.c1
3 files changed, 51 insertions, 51 deletions
diff --git a/win32/win32.c b/win32/win32.c
index 65d5f661d9..0e4c2e0aef 100644
--- a/win32/win32.c
+++ b/win32/win32.c
@@ -1858,53 +1858,6 @@ win32_crypt(const char *txt, const char *salt)
#endif
}
-/* C doesn't like repeat struct definitions */
-
-#if defined(USE_FIXED_OSFHANDLE) || defined(PERL_MSVCRT_READFIX)
-
-#ifndef _CRTIMP
-#define _CRTIMP __declspec(dllimport)
-#endif
-
-/*
- * Control structure for lowio file handles
- */
-typedef struct {
- long osfhnd; /* underlying OS file HANDLE */
- char osfile; /* attributes of file (e.g., open in text mode?) */
- char pipech; /* one char buffer for handles opened on pipes */
- int lockinitflag;
- CRITICAL_SECTION lock;
-} ioinfo;
-
-
-/*
- * Array of arrays of control structures for lowio files.
- */
-EXTERN_C _CRTIMP ioinfo* __pioinfo[];
-
-/*
- * Definition of IOINFO_L2E, the log base 2 of the number of elements in each
- * array of ioinfo structs.
- */
-#define IOINFO_L2E 5
-
-/*
- * Definition of IOINFO_ARRAY_ELTS, the number of elements in ioinfo array
- */
-#define IOINFO_ARRAY_ELTS (1 << IOINFO_L2E)
-
-/*
- * Access macros for getting at an ioinfo struct and its fields from a
- * file handle
- */
-#define _pioinfo(i) (__pioinfo[(i) >> IOINFO_L2E] + ((i) & (IOINFO_ARRAY_ELTS - 1)))
-#define _osfhnd(i) (_pioinfo(i)->osfhnd)
-#define _osfile(i) (_pioinfo(i)->osfile)
-#define _pipech(i) (_pioinfo(i)->pipech)
-
-#endif
-
#ifdef USE_FIXED_OSFHANDLE
#define FOPEN 0x01 /* file handle open */
@@ -1943,10 +1896,6 @@ EXTERN_C _CRTIMP ioinfo* __pioinfo[];
* -- BKS, 1-23-2000
*/
-/* since we are not doing a dup2(), this works fine */
-
-#define _set_osfhnd(fh, osfh) (void)(_osfhnd(fh) = osfh)
-
/* create an ioinfo entry, kill its handle, and steal the entry */
static int
diff --git a/win32/win32.h b/win32/win32.h
index 61884ab7a7..d9ffbfe1a1 100644
--- a/win32/win32.h
+++ b/win32/win32.h
@@ -493,6 +493,56 @@ struct interp_intern {
} STMT_END
#endif
+#if defined(USE_FIXED_OSFHANDLE) || defined(PERL_MSVCRT_READFIX)
+#ifdef PERL_CORE
+
+/* C doesn't like repeat struct definitions */
+#ifndef _CRTIMP
+#define _CRTIMP __declspec(dllimport)
+#endif
+
+/*
+ * Control structure for lowio file handles
+ */
+typedef struct {
+ long osfhnd; /* underlying OS file HANDLE */
+ char osfile; /* attributes of file (e.g., open in text mode?) */
+ char pipech; /* one char buffer for handles opened on pipes */
+ int lockinitflag;
+ CRITICAL_SECTION lock;
+} ioinfo;
+
+
+/*
+ * Array of arrays of control structures for lowio files.
+ */
+EXTERN_C _CRTIMP ioinfo* __pioinfo[];
+
+/*
+ * Definition of IOINFO_L2E, the log base 2 of the number of elements in each
+ * array of ioinfo structs.
+ */
+#define IOINFO_L2E 5
+
+/*
+ * Definition of IOINFO_ARRAY_ELTS, the number of elements in ioinfo array
+ */
+#define IOINFO_ARRAY_ELTS (1 << IOINFO_L2E)
+
+/*
+ * Access macros for getting at an ioinfo struct and its fields from a
+ * file handle
+ */
+#define _pioinfo(i) (__pioinfo[(i) >> IOINFO_L2E] + ((i) & (IOINFO_ARRAY_ELTS - 1)))
+#define _osfhnd(i) (_pioinfo(i)->osfhnd)
+#define _osfile(i) (_pioinfo(i)->osfile)
+#define _pipech(i) (_pioinfo(i)->pipech)
+
+/* since we are not doing a dup2(), this works fine */
+#define _set_osfhnd(fh, osfh) (void)(_osfhnd(fh) = (long)osfh)
+#endif
+#endif
+
/*
* This provides a layer of functions and macros to ensure extensions will
* get to use the same RTL functions as the core.
diff --git a/win32/win32sck.c b/win32/win32sck.c
index 0ce53c376b..594a2e3099 100644
--- a/win32/win32sck.c
+++ b/win32/win32sck.c
@@ -431,6 +431,7 @@ my_fclose (FILE *pf)
win32_fflush(pf);
err = closesocket(osf);
if (err == 0) {
+ _set_osfhnd(fileno(pf), INVALID_HANDLE_VALUE);
(void)fclose(pf); /* handle already closed, ignore error */
return 0;
}