ref: a060f135b83a1574e20a52d8aef8b21dd193238a
parent: bad66e54fad5c9d3773d30ae14eda94db44b4894
author: dbrotz <43593771+dbrotz@users.noreply.github.com>
date: Sun Dec 2 15:43:20 EST 2018
Only add newlines to file if necessary
--- a/src/asm/lexer.c
+++ b/src/asm/lexer.c
@@ -155,10 +155,7 @@
size = fread(pBuffer->pBuffer, sizeof(uint8_t), size, f);
- pBuffer->pBuffer[size] = '\n';
- pBuffer->pBuffer[size + 1] = '\n'; /* in case the file ends with \ */
- pBuffer->pBuffer[size + 2] = 0;
- pBuffer->nBufferSize = size + 2;
+ pBuffer->pBuffer[size] = 0;
/* Convert all line endings to LF and spaces */
@@ -218,6 +215,30 @@
}
}
}
+
+ pBuffer->nBufferSize = size;
+
+ /* Add newline if file doesn't end with one */
+ if (size == 0 || pBuffer->pBuffer[size - 1] != '\n') {
+ pBuffer->pBuffer[pBuffer->nBufferSize] = '\n';
+ pBuffer->nBufferSize++;
+ }
+
+ /* Add newline if \ will eat the last newline */
+ if (pBuffer->nBufferSize >= 2) {
+ size_t pos = pBuffer->nBufferSize - 2;
+
+ /* Skip spaces */
+ while (pos > 0 && pBuffer->pBuffer[pos] == ' ')
+ pos--;
+
+ if (pBuffer->pBuffer[pos] == '\\') {
+ pBuffer->pBuffer[pBuffer->nBufferSize] = '\n';
+ pBuffer->nBufferSize++;
+ }
+ }
+
+ pBuffer->pBuffer[pBuffer->nBufferSize] = 0;
pBuffer->oAtLineStart = 1;
return pBuffer;