annotate perl-5.22.2/win32/win32ceio.c @ 8045:a16537d2fe07

<xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
author HackBot
date Sat, 14 May 2016 14:54:38 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8045
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
1 #define PERL_NO_GET_CONTEXT
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
2 #define WIN32_LEAN_AND_MEAN
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
3 #define WIN32IO_IS_STDIO
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
4 #include <tchar.h>
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
5 #ifdef __GNUC__
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
6 #define Win32_Winsock
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
7 #endif
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
8 #include <windows.h>
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
9 #include <cewin32.h>
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
10
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
11 #include <sys/stat.h>
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
12 #include "EXTERN.h"
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
13 #include "perl.h"
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
14
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
15 #ifdef PERLIO_LAYERS
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
16
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
17 #include "perliol.h"
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
18
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
19 #define NO_XSLOCKS
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
20 #include "XSUB.h"
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
21
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
22
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
23 /* Bottom-most level for Win32 case */
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
24
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
25 typedef struct
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
26 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
27 struct _PerlIO base; /* The generic part */
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
28 HANDLE h; /* OS level handle */
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
29 IV refcnt; /* REFCNT for the "fd" this represents */
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
30 int fd; /* UNIX like file descriptor - index into fdtable */
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
31 } PerlIOWin32;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
32
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
33 PerlIOWin32 *fdtable[256];
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
34 IV max_open_fd = -1;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
35
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
36 IV
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
37 PerlIOWin32_popped(pTHX_ PerlIO *f)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
38 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
39 PerlIOWin32 *s = PerlIOSelf(f,PerlIOWin32);
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
40 if (--s->refcnt > 0)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
41 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
42 *f = PerlIOBase(f)->next;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
43 return 1;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
44 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
45 fdtable[s->fd] = NULL;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
46 return 0;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
47 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
48
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
49 IV
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
50 PerlIOWin32_fileno(pTHX_ PerlIO *f)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
51 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
52 return PerlIOSelf(f,PerlIOWin32)->fd;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
53 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
54
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
55 IV
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
56 PerlIOWin32_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
57 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
58 IV code = PerlIOBase_pushed(aTHX_ f,mode,arg,tab);
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
59 if (*PerlIONext(f))
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
60 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
61 PerlIOWin32 *s = PerlIOSelf(f,PerlIOWin32);
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
62 s->fd = PerlIO_fileno(PerlIONext(f));
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
63 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
64 PerlIOBase(f)->flags |= PERLIO_F_OPEN;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
65 return code;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
66 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
67
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
68 PerlIO *
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
69 PerlIOWin32_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers, IV n, const char *mode, int fd, int imode, int perm, PerlIO *f, int narg, SV **args)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
70 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
71 const char *tmode = mode;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
72 HANDLE h = INVALID_HANDLE_VALUE;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
73 if (f)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
74 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
75 /* Close if already open */
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
76 if (PerlIOBase(f)->flags & PERLIO_F_OPEN)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
77 (*PerlIOBase(f)->tab->Close)(aTHX_ f);
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
78 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
79 if (narg > 0)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
80 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
81 char *path = SvPV_nolen(*args);
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
82 DWORD access = 0;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
83 DWORD share = 0;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
84 DWORD create = -1;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
85 DWORD attr = FILE_ATTRIBUTE_NORMAL;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
86 if (*mode == '#')
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
87 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
88 /* sysopen - imode is UNIX-like O_RDONLY etc.
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
89 - do_open has converted that back to string form in mode as well
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
90 - perm is UNIX like permissions
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
91 */
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
92 mode++;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
93 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
94 else
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
95 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
96 /* Normal open - decode mode string */
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
97 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
98 switch(*mode)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
99 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
100 case 'r':
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
101 access = GENERIC_READ;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
102 create = OPEN_EXISTING;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
103 if (*++mode == '+')
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
104 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
105 access |= GENERIC_WRITE;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
106 create = OPEN_ALWAYS;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
107 mode++;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
108 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
109 break;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
110
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
111 case 'w':
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
112 access = GENERIC_WRITE;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
113 create = TRUNCATE_EXISTING;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
114 if (*++mode == '+')
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
115 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
116 access |= GENERIC_READ;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
117 mode++;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
118 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
119 break;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
120
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
121 case 'a':
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
122 access = GENERIC_WRITE;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
123 create = OPEN_ALWAYS;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
124 if (*++mode == '+')
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
125 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
126 access |= GENERIC_READ;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
127 mode++;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
128 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
129 break;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
130 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
131 if (*mode == 'b')
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
132 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
133 mode++;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
134 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
135 else if (*mode == 't')
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
136 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
137 mode++;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
138 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
139 if (*mode || create == -1)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
140 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
141 //FIX-ME: SETERRNO(EINVAL,LIB$_INVARG);
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
142 XCEMessageBoxA(NULL, "NEED TO IMPLEMENT a place in ../wince/win32io.c", "Perl(developer)", 0);
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
143 return NULL;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
144 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
145 if (!(access & GENERIC_WRITE))
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
146 share = FILE_SHARE_READ;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
147 h = CreateFileW(path,access,share,NULL,create,attr,NULL);
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
148 if (h == INVALID_HANDLE_VALUE)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
149 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
150 if (create == TRUNCATE_EXISTING)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
151 h = CreateFileW(path,access,share,NULL,(create = OPEN_ALWAYS),attr,NULL);
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
152 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
153 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
154 else
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
155 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
156 /* fd open */
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
157 h = INVALID_HANDLE_VALUE;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
158 if (fd >= 0 && fd <= max_open_fd)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
159 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
160 PerlIOWin32 *s = fdtable[fd];
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
161 if (s)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
162 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
163 s->refcnt++;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
164 if (!f)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
165 f = PerlIO_allocate(aTHX);
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
166 *f = &s->base;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
167 return f;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
168 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
169 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
170 if (*mode == 'I')
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
171 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
172 mode++;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
173 switch(fd)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
174 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
175 case 0:
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
176 h = XCEGetStdHandle(STD_INPUT_HANDLE);
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
177 break;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
178 case 1:
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
179 h = XCEGetStdHandle(STD_OUTPUT_HANDLE);
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
180 break;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
181 case 2:
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
182 h = XCEGetStdHandle(STD_ERROR_HANDLE);
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
183 break;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
184 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
185 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
186 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
187 if (h != INVALID_HANDLE_VALUE)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
188 fd = win32_open_osfhandle((intptr_t) h, PerlIOUnix_oflags(tmode));
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
189 if (fd >= 0)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
190 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
191 PerlIOWin32 *s;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
192 if (!f)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
193 f = PerlIO_allocate(aTHX);
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
194 s = PerlIOSelf(PerlIO_push(aTHX_ f,self,tmode,PerlIOArg),PerlIOWin32);
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
195 s->h = h;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
196 s->fd = fd;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
197 s->refcnt = 1;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
198 if (fd >= 0)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
199 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
200 fdtable[fd] = s;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
201 if (fd > max_open_fd)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
202 max_open_fd = fd;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
203 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
204 return f;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
205 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
206 if (f)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
207 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
208 /* FIXME: pop layers ??? */
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
209 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
210 return NULL;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
211 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
212
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
213 SSize_t
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
214 PerlIOWin32_read(pTHX_ PerlIO *f, void *vbuf, Size_t count)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
215 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
216 PerlIOWin32 *s = PerlIOSelf(f,PerlIOWin32);
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
217 DWORD len;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
218 if (!(PerlIOBase(f)->flags & PERLIO_F_CANREAD))
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
219 return 0;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
220 if (ReadFile(s->h,vbuf,count,&len,NULL))
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
221 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
222 return len;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
223 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
224 else
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
225 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
226 if (GetLastError() != NO_ERROR)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
227 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
228 PerlIOBase(f)->flags |= PERLIO_F_ERROR;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
229 PerlIO_save_errno(f);
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
230 return -1;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
231 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
232 else
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
233 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
234 if (count != 0)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
235 PerlIOBase(f)->flags |= PERLIO_F_EOF;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
236 return 0;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
237 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
238 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
239 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
240
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
241 SSize_t
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
242 PerlIOWin32_write(pTHX_ PerlIO *f, const void *vbuf, Size_t count)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
243 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
244 PerlIOWin32 *s = PerlIOSelf(f,PerlIOWin32);
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
245 DWORD len;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
246 if (WriteFile(s->h,vbuf,count,&len,NULL))
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
247 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
248 return len;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
249 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
250 else
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
251 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
252 PerlIOBase(f)->flags |= PERLIO_F_ERROR;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
253 PerlIO_save_errno(f);
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
254 return -1;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
255 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
256 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
257
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
258 IV
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
259 PerlIOWin32_seek(pTHX_ PerlIO *f, Off_t offset, int whence)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
260 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
261 static const DWORD where[3] = { FILE_BEGIN, FILE_CURRENT, FILE_END };
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
262 PerlIOWin32 *s = PerlIOSelf(f,PerlIOWin32);
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
263 DWORD high = (sizeof(offset) > sizeof(DWORD)) ? (DWORD)(offset >> 32) : 0;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
264 DWORD low = (DWORD) offset;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
265 DWORD res = SetFilePointer(s->h,low,&high,where[whence]);
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
266 if (res != 0xFFFFFFFF || GetLastError() != NO_ERROR)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
267 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
268 return 0;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
269 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
270 else
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
271 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
272 return -1;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
273 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
274 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
275
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
276 Off_t
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
277 PerlIOWin32_tell(pTHX_ PerlIO *f)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
278 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
279 PerlIOWin32 *s = PerlIOSelf(f,PerlIOWin32);
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
280 DWORD high = 0;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
281 DWORD res = SetFilePointer(s->h,0,&high,FILE_CURRENT);
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
282 if (res != 0xFFFFFFFF || GetLastError() != NO_ERROR)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
283 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
284 return ((Off_t) high << 32) | res;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
285 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
286 return (Off_t) -1;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
287 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
288
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
289 IV
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
290 PerlIOWin32_close(pTHX_ PerlIO *f)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
291 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
292 PerlIOWin32 *s = PerlIOSelf(f,PerlIOWin32);
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
293 if (s->refcnt == 1)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
294 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
295 IV code = 0;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
296 #if 0
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
297 /* This does not do pipes etc. correctly */
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
298 if (!CloseHandle(s->h))
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
299 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
300 s->h = INVALID_HANDLE_VALUE;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
301 return -1;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
302 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
303 #else
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
304 PerlIOBase(f)->flags &= ~PERLIO_F_OPEN;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
305 return win32_close(s->fd);
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
306 #endif
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
307 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
308 return 0;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
309 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
310
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
311 PerlIO *
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
312 PerlIOWin32_dup(pTHX_ PerlIO *f, PerlIO *o, CLONE_PARAMS *params, int flags)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
313 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
314 PerlIOWin32 *os = PerlIOSelf(f,PerlIOWin32);
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
315 HANDLE proc = GetCurrentProcess();
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
316 HANDLE new;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
317 if (DuplicateHandle(proc, os->h, proc, &new, 0, FALSE, DUPLICATE_SAME_ACCESS))
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
318 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
319 char mode[8];
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
320 int fd = win32_open_osfhandle((intptr_t) new, PerlIOUnix_oflags(PerlIO_modestr(o,mode)));
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
321 if (fd >= 0)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
322 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
323 f = PerlIOBase_dup(aTHX_ f, o, params, flags);
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
324 if (f)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
325 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
326 PerlIOWin32 *fs = PerlIOSelf(f,PerlIOWin32);
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
327 fs->h = new;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
328 fs->fd = fd;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
329 fs->refcnt = 1;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
330 fdtable[fd] = fs;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
331 if (fd > max_open_fd)
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
332 max_open_fd = fd;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
333 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
334 else
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
335 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
336 win32_close(fd);
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
337 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
338 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
339 else
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
340 {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
341 CloseHandle(new);
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
342 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
343 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
344 return f;
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
345 }
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
346
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
347 PerlIO_funcs PerlIO_win32 = {
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
348 sizeof(PerlIO_funcs),
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
349 "win32",
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
350 sizeof(PerlIOWin32),
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
351 PERLIO_K_RAW,
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
352 PerlIOWin32_pushed,
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
353 PerlIOWin32_popped,
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
354 PerlIOWin32_open,
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
355 PerlIOBase_binmode,
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
356 NULL, /* getarg */
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
357 PerlIOWin32_fileno,
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
358 PerlIOWin32_dup,
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
359 PerlIOWin32_read,
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
360 PerlIOBase_unread,
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
361 PerlIOWin32_write,
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
362 PerlIOWin32_seek,
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
363 PerlIOWin32_tell,
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
364 PerlIOWin32_close,
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
365 PerlIOBase_noop_ok, /* flush */
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
366 PerlIOBase_noop_fail, /* fill */
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
367 PerlIOBase_eof,
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
368 PerlIOBase_error,
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
369 PerlIOBase_clearerr,
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
370 PerlIOBase_setlinebuf,
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
371 NULL, /* get_base */
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
372 NULL, /* get_bufsiz */
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
373 NULL, /* get_ptr */
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
374 NULL, /* get_cnt */
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
375 NULL, /* set_ptrcnt */
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
376 };
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
377
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
378 #endif
a16537d2fe07 <xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
HackBot
parents:
diff changeset
379