Convert CRLF into LF on read; this should avoid problems with parsing CRLF files.
Fixes #117.
This commit is contained in:
		
							parent
							
								
									788f439a48
								
							
						
					
					
						commit
						fa1ba55ad2
					
				
					 2 changed files with 24 additions and 1 deletions
				
			
		|  | @ -340,6 +340,28 @@ InsertText(text, length) | |||
| 	return 1; | ||||
| } | ||||
| 
 | ||||
| #define RAWLOAD(dest) \ | ||||
| 	((void)((dest = *_ipp++) || (dest = loadbuf()))) | ||||
| 
 | ||||
| /*  Reads the next character, converting CRLF into LF. */ | ||||
| int | ||||
| loadchar(void) | ||||
| { | ||||
| 	int ch; | ||||
| 	RAWLOAD(ch); | ||||
| 	if (ch == '\r') | ||||
| 	{ | ||||
| 		RAWLOAD(ch); | ||||
| 		if (ch != '\n') | ||||
| 		{ | ||||
| 			/* Oops, this isn't a CRLF; put back the char we just read. */ | ||||
| 			ChPushBack(ch); | ||||
| 		} | ||||
| 		ch = '\n'; | ||||
| 	} | ||||
| 	return ch; | ||||
| } | ||||
| 
 | ||||
| /*	loadbuf() is called if LoadChar meets a '\0' character | ||||
| 	which may be the end-of-buffer mark of the current input | ||||
| 	buffer.  The '\0' could be genuine although not likely. | ||||
|  |  | |||
|  | @ -20,7 +20,7 @@ | |||
| 
 | ||||
| /* INPUT PRIMITIVES */ | ||||
| 
 | ||||
| #define	LoadChar(dest)	((void)((dest = *_ipp++) || (dest = loadbuf()))) | ||||
| #define	LoadChar(dest)	(dest = loadchar()) | ||||
| #define	PushBack()	(--_ipp) | ||||
| #define ChPushBack(ch)	(*--_ipp = (ch)) | ||||
| 
 | ||||
|  | @ -31,6 +31,7 @@ | |||
| 
 | ||||
| extern char *_ipp; | ||||
| 
 | ||||
| _PROTOTYPE(int loadchar, (void)); | ||||
| _PROTOTYPE(int loadbuf, (void)); | ||||
| _PROTOTYPE(int AtEoIT, (void)); | ||||
| _PROTOTYPE(int AtEoIF, (void)); | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue