Problemas con fread () en stdin bajo win32

Estoy tratando de analizar datos de stdin en modo binario en Win32. Lo primero que hace mi código es verificar un encabezado de 4bytes al principio:

int riff_header;
fread(&riff_header, sizeof(riff_header), 1, ifp);
//  'RIFF' = little-endian
if (riff_header != 0x46464952) {
    fprintf(stderr, "wav2msu: Incorrect header: Invalid format or endianness\n");
    fprintf(stderr, "         Value was: 0x%x\n", riff_header);
    return -1;
}

stdin se ha cambiado al modo binario antes de leerlo:

if (*argv[argc-1] == '-') {
    fprintf(stderr, "Reading from stdin.\n");
    infile = stdin;
    // We need to switch stdin to binary mode, or else we run
    // into problems under Windows
    freopen(NULL, "rb", stdin);
}

Este código funciona bien en Linux, sin embargo, en Win32 (específicamente Windows XP), elfread solo parece leer un solo byte y, por lo tanto, hace que la evaluación falle. Ejemplo

> ffmeg.exe -i ..\test.mp3 -f wav pipe:1 2> nul |..\foo.exe -o test.bin -
Reading from stdin.
foo: Incorrect header: Invalid format or endianness
     Value was: 0x4

¿Qué estoy haciendo mal

Respuestas a la pregunta(2)

Su respuesta a la pregunta