diff -rc2 ./fileio.c e:fileio.c *** ./fileio.c Sat Dec 4 19:58:26 1999 --- e:fileio.c Sat Dec 4 20:54:10 1999 *************** *** 85,88 **** --- 85,91 ---- (win_fprintf(pG, strm, (extent)len, (char far *)buf) != (int)(len)) #else /* !WINDLL */ + #ifdef NLM + # define WriteError(buf,len,strm) nlm_WriteError(buf, (extent)(len), strm) + #else /* !NLM */ # ifdef USE_FWRITE # define WriteError(buf,len,strm) \ *************** *** 92,95 **** --- 95,99 ---- ((extent)write(fileno(strm),(char *)(buf),(extent)(len)) != (extent)(len)) # endif + #endif /* ?NLM */ #endif /* ?WINDLL */ diff -rc2 ./netware/nlmcfg.h e:netware/nlmcfg.h *** ./netware/nlmcfg.h Sat Dec 4 20:39:20 1999 --- e:netware/nlmcfg.h Sat Dec 4 21:20:36 1999 *************** *** 21,25 **** # define lenEOL 2 # define PutNativeEOL {*q++ = native(CR); *q++ = native(LF);} - # define USE_FWRITE /* write() fails to support textmode output */ # if (!defined(NOTIMESTAMP) && !defined(TIMESTAMP)) # define TIMESTAMP --- 21,24 ---- *************** *** 30,32 **** --- 29,32 ---- void InitUnZipConsole OF((void)); int screenlines OF((void)); + int nlm_WriteError OF((uch *buf, extent len, FILE *strm)); #endif /* NLM */ diff -rc2 ./netware/netware.c e:netware/netware.c *** ./netware/netware.c Sat Dec 4 21:11:52 1999 --- e:netware/netware.c Sat Dec 4 21:28:38 1999 *************** *** 22,25 **** --- 22,26 ---- version() screenlines() + nlm_WriteError() ---------------------------------------------------------------------------*/ *************** *** 821,822 **** --- 822,850 ---- #endif /* MORE */ + + + /*******************************/ + /* Function nlm_WriteError() */ + /*******************************/ + + int nlm_WriteError(buf, len, strm) + uch *buf; + extent len; + FILE *strm; + { + /* The write() implementation in the Novell C RTL lacks support of + text-mode streams (fails to translate '\n' into "CR-LF" when + writing to text-mode channels like the console). + In contrast, fwrite() takes into account when an output stream + was opened in text-mode, but fails to handle output of large + buffers correctly. + So, we have to use Unix I/O style write() when emitting data + to "regular" files but switch over to stdio's fwrite() when + writing to the console streams. + */ + if ((strm == stdout)) || (file == stderr)) { + return ((extent)fwrite((char *)buf, 1, len, strm) != len); + } else { + return ((extent)write(fileno(strm), (char *)buf, len) != len); + } + } /* end function nlm_WriteError() */