[project @ 2001-12-20 17:38:40 by sewardj]
[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 HsInt prel_o_binary()
41 {
42 #ifdef HAVE_O_BINARY
43   return O_BINARY;
44 #else
45   return 0;
46 #endif
47 }
48
49 HsInt prel_seek_set()
50 {
51   return SEEK_SET;
52 }
53
54 HsInt prel_seek_end()
55 {
56   return SEEK_END;
57 }
58
59 HsInt prel_setmode(HsInt fd, HsBool toBin)
60 {
61 #ifdef _WIN32
62   return setmode(fd,(toBin == HS_BOOL_TRUE) ? _O_BINARY : _O_TEXT);
63 #else
64   return 0;
65 #endif  
66 }
67
68 HsInt prel_PrelHandle_write(HsInt fd, HsBool isSock, HsAddr ptr, HsInt off, int sz)
69 {
70 #ifdef _WIN32
71   if (isSock) {
72     return send(fd,ptr + off, sz, 0);
73   }
74 #endif
75   return write(fd,ptr + off, sz);
76 }
77
78 HsInt prel_PrelHandle_read(HsInt fd, HsBool isSock, HsAddr ptr, HsInt off, int sz)
79 {
80 #ifdef _WIN32
81   if (isSock) {
82     return recv(fd,ptr + off, sz, 0);
83   }
84 #endif
85   return read(fd,ptr + off, sz);
86
87 }
88
89 void *prel_PrelIO_memcpy(char *dst, HsInt dst_off, const char *src, size_t sz)
90
91   return memcpy(dst+dst_off, src, sz);
92 }
93
94
95 int s_isreg_PrelPosix_wrap(int m) { return S_ISREG(m); }
96 int s_isdir_PrelPosix_wrap(int m) { return S_ISDIR(m); }
97 int s_isfifo_PrelPosix_wrap(int m) { return S_ISFIFO(m); }
98 int s_isblk_PrelPosix_wrap(int m) { return S_ISBLK(m); }
99 int s_ischr_PrelPosix_wrap(int m) { return S_ISCHR(m); }
100 #ifndef mingw32_TARGET_OS
101 int s_issock_PrelPosix_wrap(int m) { return S_ISSOCK(m); }
102 void sigemptyset_PrelPosix_wrap(sigset_t *set) { sigemptyset(set); }
103 #endif