Skip site navigation (1) Skip section navigation (2)

Re: [HACKERS] 0x1A in control file on Windows

From: Magnus Hagander <magnus(at)hagander(dot)net>
To: Heikki Linnakangas <heikki(dot)linnakangas(at)enterprisedb(dot)com>
Cc: ITAGAKI Takahiro <itagaki(dot)takahiro(at)oss(dot)ntt(dot)co(dot)jp>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, pgsql-hackers(at)postgresql(dot)org, pgsql-bugs(at)postgresql(dot)org
Subject: Re: [HACKERS] 0x1A in control file on Windows
Date: 2008-09-18 11:17:53
Message-ID: 48D238E1.8020506@hagander.net (view raw or flat)
Thread:
Lists: pgsql-bugspgsql-hackers
Heikki Linnakangas wrote:
> ITAGAKI Takahiro wrote:
>> Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
>>
>>> ITAGAKI Takahiro <itagaki(dot)takahiro(at)oss(dot)ntt(dot)co(dot)jp> writes:
>>>> We probably need to add PG_BINARY when we open control files
>>>> because 0x1A is an end-of-file marker on Windows.
>>> Well, why is that a bug?  If the platform is so silly as to define text
>>> files that way, who are we to argue?
>>
>> Google says it is for for backward compatibility with CP/M
>>     http://en.wikipedia.org/wiki/End-of-file
>> and adding O_BINARY is the answer.
>>    
>> http://codenewbie.com/forum/standard-c-c/1208-binary-i-o-file-reading-0x1a-trouble.html
>>
> 
> Yes, apparently that's exactly why we have PG_BINARY, see c.h:
> 
>> /*
>>  *    NOTE:  this is also used for opening text files.
>>  *    WIN32 treats Control-Z as EOF in files opened in text mode.
>>  *    Therefore, we open files in binary mode on Win32 so we can read
>>  *    literal control-Z.    The other affect is that we see CRLF, but
>>  *    that is OK because we can already handle those cleanly.
>>  */
>> #if defined(WIN32) || defined(__CYGWIN__)
>> #define PG_BINARY    O_BINARY
>> #define PG_BINARY_A "ab"
>> #define PG_BINARY_R "rb"
>> #define PG_BINARY_W "wb"
>> #else
>> #define PG_BINARY    0
>> #define PG_BINARY_A "a"
>> #define PG_BINARY_R "r"
>> #define PG_BINARY_W "w"
>> #endif
> 
> I don't see anything wrong with the patch, but I wonder if there's more
> open() calls that need the same treatment? Like the one in
> pg_resetxlog.c/ReadControlFile().

Agreed, and I think that one would also need it - and pg_resetxlog
already does this when it writes the file. A quick look doesn't show any
other places, but I may have missed some?

/Magnus


In response to

Responses

pgsql-hackers by date

Next:From: Greg StarkDate: 2008-09-18 11:40:17
Subject: Re: Adding new flags to XLogRecord
Previous:From: Simon RiggsDate: 2008-09-18 11:15:13
Subject: Re: Adding new flags to XLogRecord

pgsql-bugs by date

Next:From: Tom LaneDate: 2008-09-18 12:31:11
Subject: Re: BUG #4421: convert_to() should be immutable
Previous:From: Heikki LinnakangasDate: 2008-09-18 11:02:15
Subject: Re: [HACKERS] 0x1A in control file on Windows

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group