From c86d9a5f016936f1dd047c0db8fe844210587dde Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Wed, 10 Jun 2020 01:30:16 +0900 Subject: [PATCH] Canonicalize newline character --- tokenize.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tokenize.c b/tokenize.c index 71dc146..552dbdc 100644 --- a/tokenize.c +++ b/tokenize.c @@ -563,6 +563,25 @@ File *new_file(char *name, int file_no, char *contents) { return file; } +// Replaces \r or \r\n with \n. +static void canonicalize_newline(char *p) { + int i = 0, j = 0; + + while (p[i]) { + if (p[i] == '\r' && p[i + 1] == '\n') { + i += 2; + p[j++] = '\n'; + } else if (p[i] == '\r') { + i++; + p[j++] = '\n'; + } else { + p[j++] = p[i++]; + } + } + + p[j] = '\0'; +} + // Removes backslashes followed by a newline. static void remove_backslash_newline(char *p) { int i = 0, j = 0; @@ -593,6 +612,7 @@ Token *tokenize_file(char *path) { if (!p) return NULL; + canonicalize_newline(p); remove_backslash_newline(p); // Save the filename for assembler .file directive. -- GitLab