summaryrefslogtreecommitdiff
path: root/wince/win32io.c
diff options
context:
space:
mode:
Diffstat (limited to 'wince/win32io.c')
-rw-r--r--wince/win32io.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/wince/win32io.c b/wince/win32io.c
index 99a804d5f8..857f25be13 100644
--- a/wince/win32io.c
+++ b/wince/win32io.c
@@ -290,13 +290,19 @@ PerlIOWin32_close(pTHX_ PerlIO *f)
PerlIOWin32 *s = PerlIOSelf(f,PerlIOWin32);
if (s->refcnt == 1)
{
- if (CloseHandle(s->h))
+ IV code = 0;
+#if 0
+ /* This does not do pipes etc. correctly */
+ if (!CloseHandle(s->h))
{
s->h = INVALID_HANDLE_VALUE;
return -1;
}
+#else
+ PerlIOBase(f)->flags &= ~PERLIO_F_OPEN;
+ return win32_close(s->fd);
+#endif
}
- PerlIOBase(f)->flags &= ~PERLIO_F_OPEN;
return 0;
}
@@ -305,16 +311,15 @@ PerlIOWin32_dup(pTHX_ PerlIO *f, PerlIO *o, CLONE_PARAMS *params, int flags)
{
PerlIOWin32 *os = PerlIOSelf(f,PerlIOWin32);
HANDLE proc = GetCurrentProcess();
- HANDLE new;
-//vvv todo if (DuplicateHandle(proc, os->h, proc, &new, 0, FALSE, DUPLICATE_SAME_ACCESS))
- if (0)
+ HANDLE new;
+ if (DuplicateHandle(proc, os->h, proc, &new, 0, FALSE, DUPLICATE_SAME_ACCESS))
{
char mode[8];
int fd = win32_open_osfhandle((intptr_t) new, PerlIOUnix_oflags(PerlIO_modestr(o,mode)));
- if (fd >= 0)
+ if (fd >= 0)
{
f = PerlIOBase_dup(aTHX_ f, o, params, flags);
- if (f)
+ if (f)
{
PerlIOWin32 *fs = PerlIOSelf(f,PerlIOWin32);
fs->h = new;
@@ -369,3 +374,4 @@ PerlIO_funcs PerlIO_win32 = {
};
#endif
+