Apply fixes to preproc for Windows compatibility

This commit is contained in:
Catnip-Consumer
2025-04-28 14:36:19 +03:00
parent 66c07f9c33
commit 2cc013ff3e
2 changed files with 14 additions and 4 deletions

View File

@@ -679,7 +679,7 @@ void AsmFile::RaiseWarning(const char* format, ...)
int AsmFile::SkipWhitespaceAndEol() int AsmFile::SkipWhitespaceAndEol()
{ {
int newlines = 0; int newlines = 0;
while (m_buffer[m_pos] == '\t' || m_buffer[m_pos] == ' ' || m_buffer[m_pos] == '\n') while (m_buffer[m_pos] == '\t' || m_buffer[m_pos] == ' ' || m_buffer[m_pos] == '\r' || m_buffer[m_pos] == '\n')
{ {
if (m_buffer[m_pos] == '\n') if (m_buffer[m_pos] == '\n')
newlines++; newlines++;
@@ -702,14 +702,14 @@ int AsmFile::FindLastLineNumber(std::string& filename)
if (pos < 0) if (pos < 0)
RaiseError("line indicator for header file not found before `enum`"); RaiseError("line indicator for header file not found before `enum`");
pos++; pos++;
while (m_buffer[pos] == ' ' || m_buffer[pos] == '\t') while (m_buffer[pos] == ' ' || m_buffer[pos] == '\t')
pos++; pos++;
if (!IsAsciiDigit(m_buffer[pos])) if (!IsAsciiDigit(m_buffer[pos]))
RaiseError("malformatted line indicator found before `enum`, expected line number"); RaiseError("malformatted line indicator found before `enum`, expected line number");
unsigned n = 0; unsigned n = 0;
int digit = 0; int digit = 0;
while ((digit = ConvertDigit(m_buffer[pos++], 10)) != -1) while ((digit = ConvertDigit(m_buffer[pos++], 10)) != -1)
@@ -744,7 +744,7 @@ int AsmFile::FindLastLineNumber(std::string& filename)
filename += c; filename += c;
} }
return n + linebreaks - 1; return n + linebreaks - 1;
} }

View File

@@ -26,6 +26,11 @@
#include "c_file.h" #include "c_file.h"
#include "charmap.h" #include "charmap.h"
#ifdef _WIN32
#include <io.h>
#include <fcntl.h>
#endif
static void UsageAndExit(const char *program); static void UsageAndExit(const char *program);
Charmap* g_charmap; Charmap* g_charmap;
@@ -179,6 +184,11 @@ int main(int argc, char **argv)
g_charmap = new Charmap(charmap); g_charmap = new Charmap(charmap);
#ifdef _WIN32
// On Windows, piping from stdout can break newlines. Treat stdout as binary stream to avoid this.
_setmode(_fileno(stdout), _O_BINARY);
#endif
const char* extension = GetFileExtension(source); const char* extension = GetFileExtension(source);
if (!extension) if (!extension)