diff --git a/hw/xfree86/parser/scan.c b/hw/xfree86/parser/scan.c
index b80fbfb..8e37aef 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,14 @@ again:
 			}
 			if (ret == NULL)
 			{
-				return (pushToken = EOF_TOKEN);
+				/* move to the next file if necessary */
+				if (curFileIndex + 1 < numFiles) {
+					curFileIndex++;
+					configLineNo = 0;
+					goto again;
+				}
+				else
+					return (pushToken = EOF_TOKEN);
 			}
 			configLineNo++;
 			configPos = 0;
