X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Flib%2Fstd%2Fcbits%2FPrelIOUtils.c;h=edbd898e4506645a79d476b445527562b36c2efe;hb=239e9471e104fd88ec93bf42623c3a68a496657a;hp=607d1bde3a271a6ed73f604ed2009ad26a969f02;hpb=914cc0f06380835af7bd58dd77560c88ff0c31af;p=ghc-hetmet.git diff --git a/ghc/lib/std/cbits/PrelIOUtils.c b/ghc/lib/std/cbits/PrelIOUtils.c index 607d1bd..edbd898 100644 --- a/ghc/lib/std/cbits/PrelIOUtils.c +++ b/ghc/lib/std/cbits/PrelIOUtils.c @@ -37,7 +37,7 @@ HsInt prel_seek_cur() return SEEK_CUR; } -HsInt prel_o_binary() +int prel_o_binary() { #ifdef HAVE_O_BINARY return O_BINARY; @@ -46,6 +46,87 @@ HsInt prel_o_binary() #endif } +int prel_o_rdonly() +{ +#ifdef O_RDONLY + return O_RDONLY; +#else + return 0; +#endif +} + +int prel_o_wronly() +{ +#ifdef O_WRONLY + return O_WRONLY; +#else + return 0; +#endif +} + +int prel_o_rdwr() +{ +#ifdef O_RDWR + return O_RDWR; +#else + return 0; +#endif +} + +int prel_o_append() +{ +#ifdef O_APPEND + return O_APPEND; +#else + return 0; +#endif +} + +int prel_o_creat() +{ +#ifdef O_CREAT + return O_CREAT; +#else + return 0; +#endif +} + +int prel_o_excl() +{ +#ifdef O_EXCL + return O_EXCL; +#else + return 0; +#endif +} + +int prel_o_trunc() +{ +#ifdef O_TRUNC + return O_TRUNC; +#else + return 0; +#endif +} + +int prel_o_noctty() +{ +#ifdef O_NOCTTY + return O_NOCTTY; +#else + return 0; +#endif +} + +int prel_o_nonblock() +{ +#ifdef O_NONBLOCK + return O_NONBLOCK; +#else + return 0; +#endif +} + HsInt prel_seek_set() { return SEEK_SET; @@ -65,18 +146,165 @@ HsInt prel_setmode(HsInt fd, HsBool toBin) #endif } -HsInt prel_PrelHandle_write(HsInt fd, HsAddr ptr, HsInt off, HsInt sz) +HsInt prel_PrelHandle_write(HsInt fd, HsBool isSock, HsAddr ptr, HsInt off, int sz) { +#ifdef _WIN32 + if (isSock) { + return send(fd,ptr + off, sz, 0); + } +#endif return write(fd,ptr + off, sz); } -HsInt prel_PrelHandle_read(HsInt fd, HsAddr ptr, HsInt off, HsInt sz) +HsInt prel_PrelHandle_read(HsInt fd, HsBool isSock, HsAddr ptr, HsInt off, int sz) { +#ifdef _WIN32 + if (isSock) { + return recv(fd,ptr + off, sz, 0); + } +#endif return read(fd,ptr + off, sz); + } -void *prel_PrelIO_memcpy(char *dst, HsInt dst_off, const char *src, size_t sz) +void *prel_PrelIO_memcpy(char *dst, HsInt dst_off, const char *src, HsInt src_off, size_t sz) { - return memcpy(dst+dst_off, src, sz); + return memcpy(dst+dst_off, src+src_off, sz); +} + + +int s_isreg_PrelPosix_wrap(int m) { return S_ISREG(m); } +int s_isdir_PrelPosix_wrap(int m) { return S_ISDIR(m); } +int s_isfifo_PrelPosix_wrap(int m) { return S_ISFIFO(m); } +int s_isblk_PrelPosix_wrap(int m) { return S_ISBLK(m); } +int s_ischr_PrelPosix_wrap(int m) { return S_ISCHR(m); } +#ifndef mingw32_TARGET_OS +int s_issock_PrelPosix_wrap(int m) { return S_ISSOCK(m); } +void sigemptyset_PrelPosix_wrap(sigset_t *set) { sigemptyset(set); } +#endif + +HsInt prel_sizeof_stat() +{ + return sizeof(struct stat); +} + +time_t prel_st_mtime(struct stat* st) { return st->st_mtime; } +off_t prel_st_size(struct stat* st) { return st->st_size; } +mode_t prel_st_mode(struct stat* st) { return st->st_mode; } + +#if HAVE_TERMIOS_H +tcflag_t prel_lflag(struct termios* ts) { return ts->c_lflag; } +void prel_poke_lflag(struct termios* ts, tcflag_t t) { ts->c_lflag = t; } +unsigned char* prel_ptr_c_cc(struct termios* ts) { return ((unsigned char*)(ts + offsetof(struct termios, c_cc))); } +#endif + +HsInt prel_sizeof_termios() +{ +#ifndef mingw32_TARGET_OS + return sizeof(struct termios); +#else + return 0; +#endif +} + +HsInt prel_sizeof_sigset_t() +{ +#ifndef mingw32_TARGET_OS + return sizeof(sigset_t); +#else + return 0; +#endif +} + +int prel_echo() +{ +#ifdef ECHO + return ECHO; +#else + return 0; +#endif + +} +int prel_tcsanow() +{ +#ifdef TCSANOW + return TCSANOW; +#else + return 0; +#endif + +} + +int prel_icanon() +{ +#ifdef ICANON + return ICANON; +#else + return 0; +#endif } +int prel_vmin() +{ +#ifdef VMIN + return VMIN; +#else + return 0; +#endif +} + +int prel_vtime() +{ +#ifdef VTIME + return VTIME; +#else + return 0; +#endif +} + +int prel_sigttou() +{ +#ifdef SIGTTOU + return SIGTTOU; +#else + return 0; +#endif +} + +int prel_sig_block() +{ +#ifdef SIG_BLOCK + return SIG_BLOCK; +#else + return 0; +#endif +} + +int prel_sig_setmask() +{ +#ifdef SIG_SETMASK + return SIG_SETMASK; +#else + return 0; +#endif +} + +int prel_f_getfl() +{ +#ifdef F_GETFL + return F_GETFL; +#else + return 0; +#endif +} + +int prel_f_setfl() +{ +#ifdef F_SETFL + return F_SETFL; +#else + return 0; +#endif +} + +