(svn r14231) -Fix: Windows binaries not able to read non-windows newlines ini files. For more detail read the 'attached' diff.
authorrubidium
Tue, 02 Sep 2008 20:24:55 +0000
changeset 10064 14763b82c4f4
parent 10063 29c32eeca86c
child 10065 2bf4d74bbf28
(svn r14231) -Fix: Windows binaries not able to read non-windows newlines ini files. For more detail read the 'attached' diff.
src/ini.cpp
--- a/src/ini.cpp	Tue Sep 02 20:01:18 2008 +0000
+++ b/src/ini.cpp	Tue Sep 02 20:24:55 2008 +0000
@@ -146,7 +146,19 @@
 	uint comment_alloc = 0;
 
 	size_t end;
-	FILE *in = FioFOpenFile(filename, "r", DATA_DIR, &end);
+	/*
+	 * Now we are going to open a file that contains no more than simple
+	 * plain text. That would raise the question: "why open the file as
+	 * if it is a binary file?". That's simple... Microsoft, in all
+	 * their greatness and wisdom decided it would be useful if ftell
+	 * is aware of '\r\n' and "sees" that as a single character. The
+	 * easiest way to test for that situation is by searching for '\n'
+	 * and decrease the value every time you encounter a '\n'. This will
+	 * thus also make ftell "see" the '\r' when it is not there, so the
+	 * result of ftell will be highly unreliable. So to work around this
+	 * marvel of wisdom we have to open in as a binary file.
+	 */
+	FILE *in = FioFOpenFile(filename, "rb", DATA_DIR, &end);
 	if (in == NULL) return;
 
 	end += ftell(in);