41 |
|
file_open(fde_t *F, const char *filename, int mode, int fmode) |
42 |
|
{ |
43 |
|
int fd; |
44 |
– |
#ifdef _WIN32 |
45 |
– |
DWORD dwDesiredAccess = 0; |
44 |
|
|
47 |
– |
switch (mode & ~(O_CREAT | O_TRUNC | O_APPEND)) |
48 |
– |
{ |
49 |
– |
case O_RDONLY: |
50 |
– |
dwDesiredAccess = GENERIC_READ; |
51 |
– |
break; |
52 |
– |
case O_WRONLY: |
53 |
– |
dwDesiredAccess = GENERIC_WRITE; |
54 |
– |
break; |
55 |
– |
case O_RDWR: |
56 |
– |
dwDesiredAccess = GENERIC_READ | GENERIC_WRITE; |
57 |
– |
} |
58 |
– |
|
59 |
– |
fd = (int) CreateFile( |
60 |
– |
filename, |
61 |
– |
dwDesiredAccess, |
62 |
– |
FILE_SHARE_READ | ((dwDesiredAccess & GENERIC_WRITE) ? 0:FILE_SHARE_WRITE), |
63 |
– |
NULL, |
64 |
– |
((mode & O_CREAT) == 0) ? OPEN_EXISTING : |
65 |
– |
((mode & O_TRUNC) ? CREATE_ALWAYS : OPEN_ALWAYS), |
66 |
– |
FILE_ATTRIBUTE_NORMAL, |
67 |
– |
NULL |
68 |
– |
); |
69 |
– |
|
70 |
– |
if (fd == (int)INVALID_HANDLE_VALUE) |
71 |
– |
{ |
72 |
– |
errno = GetLastError(); |
73 |
– |
return -1; |
74 |
– |
} |
75 |
– |
|
76 |
– |
if ((mode & O_APPEND)) |
77 |
– |
SetFilePointer((HANDLE)fd, 0, NULL, FILE_END); |
78 |
– |
#else |
45 |
|
if (number_fd == hard_fdlimit) |
46 |
|
{ |
47 |
|
errno = ENFILE; |
50 |
|
|
51 |
|
if ((fd = open(filename, mode, fmode)) < 0) |
52 |
|
return -1; |
87 |
– |
#endif |
53 |
|
|
54 |
|
fd_open(F, fd, 0, filename); |
55 |
|
return 0; |
106 |
|
fb->flags = 0; |
107 |
|
fb->pbptr = NULL; |
108 |
|
|
144 |
– |
#ifdef _WIN32 |
145 |
– |
SetFilePointer((HANDLE)fb->F.fd, 0, NULL, FILE_BEGIN); |
146 |
– |
#else |
109 |
|
lseek(fb->F.fd, 0, SEEK_SET); |
148 |
– |
#endif |
110 |
|
return 0; |
111 |
|
} |
112 |
|
|
127 |
|
if (fb->flags) |
128 |
|
return -1; |
129 |
|
|
169 |
– |
#ifdef _WIN32 |
170 |
– |
if (!ReadFile((HANDLE)fb->F.fd, fb->buf, BUFSIZ, (LPDWORD)&n, NULL)) |
171 |
– |
n = -1; |
172 |
– |
#else |
130 |
|
n = read(fb->F.fd, fb->buf, BUFSIZ); |
174 |
– |
#endif |
131 |
|
|
132 |
|
if (n > 0) |
133 |
|
{ |
224 |
|
if (0 == fb->flags) |
225 |
|
{ |
226 |
|
assert(strlen(str) == nbytes); |
271 |
– |
#ifdef _WIN32 |
272 |
– |
if (!WriteFile((HANDLE)fb->F.fd, str, nbytes, (LPDWORD)&n, NULL)) |
273 |
– |
n = -1; |
274 |
– |
#else |
227 |
|
n = write(fb->F.fd, str, nbytes); |
228 |
< |
#endif |
228 |
> |
|
229 |
|
if (n == -1) |
230 |
|
fb->flags |= FB_FAIL; |
231 |
|
} |