> I've been putting off cleaning up this mess, but I found the time this > weekend to give it a start. I installed the following patch. It > avoids the use of setmode and <io.h> entirely, and it cleans up some > of the inconsistencies in the code (in some cases, they were bugs that > even infected the GNU/Linux version -- ouch!).
Thanks for starting this task. > > Since I don't use DOS, someone with some expertise in that area will > have to double-check it. I'm willing to check it on cygwin. This is a partial review, I will probably have more comments as I get more time to actually comple and test some of the changes. It would also be nice if someone could give anon CVS a kick; it has been stuck since the 5th. I would also like to compare your work to my email on the subject a couple of months ago: http://lists.gnu.org/archive/html/bug-coreutils/2005-05/msg00136.html > > I dislike all that isatty stuff -- is there some way that we could > easily remove it from the mainline sources, and put it in config.h or > somewhere we we don't have to see it? For example, can we replace this: > > if (O_BINARY && ! isatty (STDIN_FILENO)) > freopen (NULL, "rb", stdin); > > with this: > > if (O_BINARY) > freopen (NULL, "rb", stdin); Sounds like a good candidate for a gnulib module. Also, I've thought more about fcntl(fd, F_SETFL, flags), where the nice gnulib behavior would be: neither O_BINARY nor O_TEXT: leave mode unchanged O_BINARY: if not tty, force binary mode O_TEXT: if not tty, force text mode O_BINARY | O_TEXT: if not tty, swap mode > > and have a wrapper on MS-DOS that defines freopen to not do anything > if the first argument is NULL, the second ends in "b", and the third a > standard tty? Since POSIX states that "w+b" and "wb+" are synonyms, for example, we should be a little more careful than just checking for ends in 'b'. Or is there a coding style that states which of the two we should prefer? > Index: src/cat.c > @@ -553,9 +543,6 @@ main (int argc, char **argv) > {"show-ends", no_argument, NULL, 'E'}, > {"show-tabs", no_argument, NULL, 'T'}, > {"show-all", no_argument, NULL, 'A'}, > -#if O_BINARY > - {"binary", no_argument, NULL, 'B'}, > -#endif I'd like to see a deprecation period rather than outright removal, where -B is undocumented, and using it evokes a warning but is otherwise a no-op (rather than a fatal unrecognized option). > Index: src/tac.c > Index: src/tee.c > @@ -140,7 +140,10 @@ tee (int nfiles, const char **files) > ssize_t bytes_read; > int i; > bool ok = true; > - const char *mode_string = (append ? "a" : "w"); > + char const *mode_string = > + (O_BINARY > + ? (append ? "ab" : "wb") > + : (append ? "a" : "w")); Are there non-standard hosts out there that don't treat "ab" as a synonym to "a" per POSIX, and if so, should we cater to them with a gnulib module? It is much more readable to write this as: char const *mode_string = (append ? "ab" : "wb"); -- Eric Blake _______________________________________________ Bug-coreutils mailing list Bug-coreutils@gnu.org http://lists.gnu.org/mailman/listinfo/bug-coreutils