From: Lubomir I. Ivanov Date: Fri, 24 Aug 2012 22:39:00 +0000 (+0300) Subject: file.c: open a file in binary mode in readfile() X-Git-Url: http://git.tdb.fi/?p=ext%2Fsubsurface.git;a=commitdiff_plain;h=642c83f5327317780a0f10b3ab46f6c1bd8bb202 file.c: open a file in binary mode in readfile() O_TEXT is the default mode for fctrl's open() and on windows created files, line endings are counted by fstat() as CR+LF adding an extra byte for each line. the result from this is that, while the file still can be read into a buffer, the read() return (ret) has a different size compared to the previously allocated buffer, breaking at: if (ret == mem->size) a solution is to open() the file in O_BINARY mode, which should technically suppress the EOL translation. Signed-off-by: Lubomir I. Ivanov [ Fixed to work under real operating systems that don't need this crap. "Here's a nickel, kid, go and buy a real OS". - Linus ] Signed-off-by: Linus Torvalds --- diff --git a/file.c b/file.c index e016390..da49899 100644 --- a/file.c +++ b/file.c @@ -8,6 +8,11 @@ #include "dive.h" #include "file.h" +/* Crazy windows sh*t */ +#ifndef O_BINARY +#define O_BINARY 0 +#endif + static int readfile(const char *filename, struct memblock *mem) { int ret, fd; @@ -17,7 +22,7 @@ static int readfile(const char *filename, struct memblock *mem) mem->buffer = NULL; mem->size = 0; - fd = open(filename, O_RDONLY); + fd = open(filename, O_RDONLY | O_BINARY); if (fd < 0) return fd; ret = fstat(fd, &st);