[project @ 2002-02-12 11:44:54 by simonmar]
[ghc-hetmet.git] / ghc / lib / std / cbits / PrelIOUtils.c
1 /* 
2  * (c) The GRASP/AQUA Project, Glasgow University, 1994-
3  *
4  * IO / Handle support.
5  */
6 #include "HsStd.h"
7 #include "PrelIOUtils.h"
8 #include <stdio.h>
9 #include <stdlib.h>
10 #include <stddef.h>
11
12 #ifndef offsetof
13 #define offsetof(t, f) ((size_t) &((t *)0)->f)
14 #endif
15
16 #ifdef _WIN32
17 #include <io.h>
18 #include <fcntl.h>
19 #endif
20
21 HsBool prel_supportsTextMode()
22 {
23 #if defined(mingw32_TARGET_OS)
24   return HS_BOOL_FALSE;
25 #else
26   return HS_BOOL_TRUE;
27 #endif
28 }
29
30 HsInt prel_bufsiz()
31 {
32   return BUFSIZ;
33 }
34
35 HsInt prel_seek_cur()
36 {
37   return SEEK_CUR;
38 }
39
40 int prel_o_binary()
41 {
42 #ifdef HAVE_O_BINARY
43   return O_BINARY;
44 #else
45   return 0;
46 #endif
47 }
48
49 int prel_o_rdonly()
50 {
51 #ifdef O_RDONLY
52   return O_RDONLY;
53 #else
54   return 0;
55 #endif
56 }
57
58 int prel_o_wronly()
59 {
60 #ifdef O_WRONLY
61   return O_WRONLY;
62 #else
63   return 0;
64 #endif
65 }
66
67 int prel_o_rdwr()
68 {
69 #ifdef O_RDWR
70   return O_RDWR;
71 #else
72   return 0;
73 #endif
74 }
75
76 int prel_o_append()
77 {
78 #ifdef O_APPEND
79   return O_APPEND;
80 #else
81   return 0;
82 #endif
83 }
84
85 int prel_o_creat()
86 {
87 #ifdef O_CREAT
88   return O_CREAT;
89 #else
90   return 0;
91 #endif
92 }
93
94 int prel_o_excl()
95 {
96 #ifdef O_EXCL
97   return O_EXCL;
98 #else
99   return 0;
100 #endif
101 }
102
103 int prel_o_trunc()
104 {
105 #ifdef O_TRUNC
106   return O_TRUNC;
107 #else
108   return 0;
109 #endif
110 }
111
112 int prel_o_noctty()
113 {
114 #ifdef O_NOCTTY
115   return O_NOCTTY;
116 #else
117   return 0;
118 #endif
119 }
120
121 int prel_o_nonblock()
122 {
123 #ifdef O_NONBLOCK
124   return O_NONBLOCK;
125 #else
126   return 0;
127 #endif
128 }
129
130 HsInt prel_seek_set()
131 {
132   return SEEK_SET;
133 }
134
135 HsInt prel_seek_end()
136 {
137   return SEEK_END;
138 }
139
140 HsInt prel_setmode(HsInt fd, HsBool toBin)
141 {
142 #ifdef _WIN32
143   return setmode(fd,(toBin == HS_BOOL_TRUE) ? _O_BINARY : _O_TEXT);
144 #else
145   return 0;
146 #endif  
147 }
148
149 HsInt prel_PrelHandle_write(HsInt fd, HsBool isSock, HsAddr ptr, HsInt off, int sz)
150 {
151 #ifdef _WIN32
152   if (isSock) {
153     return send(fd,ptr + off, sz, 0);
154   }
155 #endif
156   return write(fd,ptr + off, sz);
157 }
158
159 HsInt prel_PrelHandle_read(HsInt fd, HsBool isSock, HsAddr ptr, HsInt off, int sz)
160 {
161 #ifdef _WIN32
162   if (isSock) {
163     return recv(fd,ptr + off, sz, 0);
164   }
165 #endif
166   return read(fd,ptr + off, sz);
167
168 }
169
170 void *prel_PrelIO_memcpy(char *dst, HsInt dst_off, const char *src, HsInt src_off, size_t sz)
171
172   return memcpy(dst+dst_off, src+src_off, sz);
173 }
174
175
176 int s_isreg_PrelPosix_wrap(int m) { return S_ISREG(m); }
177 int s_isdir_PrelPosix_wrap(int m) { return S_ISDIR(m); }
178 int s_isfifo_PrelPosix_wrap(int m) { return S_ISFIFO(m); }
179 int s_isblk_PrelPosix_wrap(int m) { return S_ISBLK(m); }
180 int s_ischr_PrelPosix_wrap(int m) { return S_ISCHR(m); }
181 #ifndef mingw32_TARGET_OS
182 int s_issock_PrelPosix_wrap(int m) { return S_ISSOCK(m); }
183 void sigemptyset_PrelPosix_wrap(sigset_t *set) { sigemptyset(set); }
184 #endif
185
186 HsInt prel_sizeof_stat()
187 {
188   return sizeof(struct stat);
189 }
190
191 time_t prel_st_mtime(struct stat* st) { return st->st_mtime; }
192 off_t  prel_st_size(struct stat* st) { return st->st_size; }
193 mode_t prel_st_mode(struct stat* st) { return st->st_mode; }
194
195 #if HAVE_TERMIOS_H
196 tcflag_t prel_lflag(struct termios* ts) { return ts->c_lflag; }
197 void     prel_poke_lflag(struct termios* ts, tcflag_t t) { ts->c_lflag = t; }
198 unsigned char* prel_ptr_c_cc(struct termios* ts) { return ((unsigned char*)(ts + offsetof(struct termios, c_cc))); }
199 #endif
200
201 HsInt prel_sizeof_termios()
202 {
203 #ifndef mingw32_TARGET_OS
204   return sizeof(struct termios);
205 #else
206   return 0;
207 #endif
208 }
209
210 HsInt prel_sizeof_sigset_t()
211 {
212 #ifndef mingw32_TARGET_OS
213   return sizeof(sigset_t);
214 #else
215   return 0;
216 #endif
217 }
218
219 int prel_echo()
220 {
221 #ifdef ECHO
222   return ECHO;
223 #else
224   return 0;
225 #endif
226
227 }
228 int prel_tcsanow()
229 {
230 #ifdef TCSANOW
231   return TCSANOW;
232 #else
233   return 0;
234 #endif
235
236 }
237
238 int prel_icanon()
239 {
240 #ifdef ICANON
241   return ICANON;
242 #else
243   return 0;
244 #endif
245 }
246
247 int prel_vmin()
248 {
249 #ifdef VMIN
250   return VMIN;
251 #else
252   return 0;
253 #endif
254 }
255
256 int prel_vtime()
257 {
258 #ifdef VTIME
259   return VTIME;
260 #else
261   return 0;
262 #endif
263 }
264
265 int prel_sigttou()
266 {
267 #ifdef SIGTTOU
268   return SIGTTOU;
269 #else
270   return 0;
271 #endif
272 }
273
274 int prel_sig_block()
275 {
276 #ifdef SIG_BLOCK
277   return SIG_BLOCK;
278 #else
279   return 0;
280 #endif
281 }
282
283 int prel_sig_setmask()
284 {
285 #ifdef SIG_SETMASK
286   return SIG_SETMASK;
287 #else
288   return 0;
289 #endif
290 }
291
292 int prel_f_getfl()
293 {
294 #ifdef F_GETFL
295   return F_GETFL;
296 #else
297   return 0;
298 #endif
299 }
300
301 int prel_f_setfl()
302 {
303 #ifdef F_SETFL
304   return F_SETFL;
305 #else
306   return 0;
307 #endif
308 }
309
310