diff --git a/Build.sh b/Build.sh index 9c25c38..b2394ad 100644 --- a/Build.sh +++ b/Build.sh @@ -1668,6 +1668,7 @@ ac_header sys/select.h sys/types.h ac_header sys/sysmacros.h ac_header bstring.h ac_header grp.h sys/types.h +ac_header io.h ac_header libgen.h ac_header libutil.h sys/types.h ac_header paths.h diff --git a/exec.c b/exec.c index efda5d5..7b98f8c 100644 --- a/exec.c +++ b/exec.c @@ -901,6 +901,9 @@ scriptexec(struct op *tp, const char **ap) unsigned short m; ssize_t n; +#ifdef __OS2__ + setmode(fd, O_TEXT); +#endif /* read first couple of octets from file */ n = read(fd, buf, sizeof(buf) - 1); close(fd); diff --git a/main.c b/main.c index 8519b01..038fc89 100644 --- a/main.c +++ b/main.c @@ -1438,6 +1438,10 @@ openpipe(int *pv) pv[1] = savefd(lpv[1]); if (pv[1] != lpv[1]) close(lpv[1]); +#ifdef __OS2__ + setmode(pv[0], O_TEXT); + setmode(pv[1], O_BINARY); +#endif } void diff --git a/misc.c b/misc.c index 6d48e05..e337b4b 100644 --- a/misc.c +++ b/misc.c @@ -1329,6 +1329,10 @@ blocking_read(int fd, char *buf, size_t nbytes) ssize_t ret; bool tried_reset = false; +#ifdef __OS2__ + int saved_mode = setmode(fd, O_TEXT); + int saved_errno; +#endif while ((ret = read(fd, buf, nbytes)) < 0) { if (!tried_reset && errno == EAGAIN) { if (reset_nonblock(fd) > 0) { @@ -1339,6 +1343,11 @@ blocking_read(int fd, char *buf, size_t nbytes) } break; } +#ifdef __OS2__ + saved_errno = errno; + setmode(fd, saved_mode); + errno = saved_errno; +#endif return (ret); } diff --git a/sh.h b/sh.h index d4a13dc..068b6cd 100644 --- a/sh.h +++ b/sh.h @@ -64,6 +64,9 @@ #include #include #include +#if HAVE_IO_H +#include +#endif #if HAVE_LIBGEN_H #include #endif