[PATCH 2/7] xfree86: Handle config files ending without newline

Peter Hutterer peter.hutterer at who-t.net
Tue Feb 9 21:36:45 PST 2010


From: Dan Nicholson <dbn.lists at gmail.com>

The config parser expects to find a newline at the end of each line, so
files ending without one would confuse it. A newline is inserted at the
end of the buffer in these situations. Additionally, switching to the
next config file is moved to the higher level to allow parsing of the
last line of the previous file to complete before shifting the index and
resetting the line number.

Signed-off-by: Dan Nicholson <dbn.lists at gmail.com>
Tested-by: Stephan Raue<stephan.raue at gmx.net>
Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
---
 hw/xfree86/parser/scan.c |   26 +++++++++++++++++++-------
 1 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/hw/xfree86/parser/scan.c b/hw/xfree86/parser/scan.c
index b80fbfb..03cbc8a 100644
--- a/hw/xfree86/parser/scan.c
+++ b/hw/xfree86/parser/scan.c
@@ -227,13 +227,15 @@ xf86getNextLine(void)
 			    configFiles[curFileIndex].file);
 
 		if (!ret) {
-			/* stop if there are no more files */
-			if (++curFileIndex >= numFiles) {
-				curFileIndex = 0;
+			/*
+			 * if the file doesn't end in a newline, add one
+			 * and trigger another read
+			 */
+			if (pos != 0) {
+				strcpy(&configBuf[pos], "\n");
+				ret = configBuf;
+			} else
 				break;
-			}
-			configLineNo = 0;
-			continue;
 		}
 
 		/* search for EOL in the new block of chars */
@@ -338,7 +340,17 @@ again:
 			}
 			if (ret == NULL)
 			{
-				return (pushToken = EOF_TOKEN);
+				/*
+				 * if necessary, move to the next file and
+				 * read the first line
+				 */
+				if (curFileIndex + 1 < numFiles) {
+					curFileIndex++;
+					configLineNo = 0;
+					goto again;
+				}
+				else
+					return (pushToken = EOF_TOKEN);
 			}
 			configLineNo++;
 			configPos = 0;
-- 
1.6.6



More information about the xorg-devel mailing list