www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 4243] New: [snn.lib] setmode doesn't set stdin/stdout to binary

http://d.puremagic.com/issues/show_bug.cgi?id=4243

           Summary: [snn.lib] setmode doesn't set stdin/stdout to binary
           Product: D
           Version: 2.041
          Platform: x86
               URL: http://www.digitalmars.com/d/archives/digitalmars/D/se
                    tmode_again_74658.html
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: rsinfu gmail.com


--- Comment #0 from Shin Fujishiro <rsinfu gmail.com> 2010-05-27 15:32:13 PDT
---
setmode(stdout, O_BINARY) does not set stdout to binary mode.  setmode surely
works for fopen'ed files, but does not work for standard file streams.

-------------------- test1.d
import std.c.stdio;
extern(C) int setmode(int, int);
enum O_BINARY = 0x8000;
void main()
{
    string s = "\n";

    // write to stdout
    setmode(stdout._file, O_BINARY);    // set to binary mode
    fwrite(s.ptr, 1, s.length, stdout);

    // write to test.dat
    auto f = fopen("test.dat", "w");    // open in text mode
    setmode(f._file, O_BINARY);         // set to binary mode
    fwrite(s.ptr, 1, s.length, f);
    fclose(f);
}
--------------------
dmd -run test1 | od -c
0000000 \r \n <-- written in text mode 0000002
od -c test.dat
0000000 \n <-- okay 0000001 -------------------- This also does not work: -------------------- test2.d import std.c.stdio; enum _IOTRAN = 0x100; // taken from DMC include/stdio.h void main() { string s = "\n"; stdout._flag &= ~_IOTRAN; fwrite(s.ptr, 1, s.length, stdout); } --------------------
dmd -run test2 | od -c
0000000 \r \n <-- written in text mode 0000002 -------------------- Only this works: -------------------- test3.d import std.c.stdio; void main() { string s = "\n"; __fhnd_info[stdout._file] &= ~FHND_TEXT; fwrite(s.ptr, 1, s.length, stdout); } --------------------
dmd -run test3 | od -c
0000000 \n <-- okay, written in binary mode 0000001 -------------------- -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
May 27 2010