diff --git a/include/asm/main.hpp b/include/asm/main.hpp index 9e91b08a..2631e545 100644 --- a/include/asm/main.hpp +++ b/include/asm/main.hpp @@ -16,7 +16,7 @@ extern bool warnOnLdOpt; extern bool verbose; extern bool warnings; // True to enable warnings, false to disable them. -extern FILE *dependfile; +extern FILE *dependFile; extern std::string targetFileName; extern bool generatedMissingIncludes; extern bool failedOnMissingInclude; diff --git a/src/asm/fstack.cpp b/src/asm/fstack.cpp index a7e4c391..1a4c01d1 100644 --- a/src/asm/fstack.cpp +++ b/src/asm/fstack.cpp @@ -142,10 +142,10 @@ void fstk_SetPreIncludeFile(std::string const &path) { } static void printDep(std::string const &path) { - if (dependfile) { - fprintf(dependfile, "%s: %s\n", targetFileName.c_str(), path.c_str()); + if (dependFile) { + fprintf(dependFile, "%s: %s\n", targetFileName.c_str(), path.c_str()); if (generatePhonyDeps) - fprintf(dependfile, "%s:\n", path.c_str()); + fprintf(dependFile, "%s:\n", path.c_str()); } } diff --git a/src/asm/main.cpp b/src/asm/main.cpp index 8268493a..b8d988b3 100644 --- a/src/asm/main.cpp +++ b/src/asm/main.cpp @@ -10,6 +10,7 @@ #include "error.hpp" #include "extern/getopt.hpp" +#include "helpers.hpp" // Defer #include "parser.hpp" #include "version.hpp" @@ -20,7 +21,7 @@ #include "asm/symbol.hpp" #include "asm/warning.hpp" -FILE *dependfile = nullptr; +FILE *dependFile = nullptr; bool generatedMissingIncludes = false; bool failedOnMissingInclude = false; bool generatePhonyDeps = false; @@ -37,7 +38,6 @@ bool warnings; // True to enable warnings, false to disable them. static std::string make_escape(std::string &str) { std::string escaped; size_t pos = 0; - for (;;) { // All dollars needs to be doubled size_t nextPos = str.find("$", pos); @@ -114,18 +114,20 @@ static void printUsage() { int main(int argc, char *argv[]) { time_t now = time(nullptr); - char const *sourceDateEpoch = getenv("SOURCE_DATE_EPOCH"); - // Support SOURCE_DATE_EPOCH for reproducible builds // https://reproducible-builds.org/docs/source-date-epoch/ - if (sourceDateEpoch) + if (char const *sourceDateEpoch = getenv("SOURCE_DATE_EPOCH"); sourceDateEpoch) now = (time_t)strtoul(sourceDateEpoch, nullptr, 0); + Defer closeDependFile{[&] { + if (dependFile) + fclose(dependFile); + }}; + // Perform some init for below sym_Init(now); // Set defaults - opt_B("01"); opt_G("0123"); opt_P(0); @@ -140,7 +142,6 @@ int main(int argc, char *argv[]) { uint32_t maxDepth = DEFAULT_MAX_DEPTH; char const *dependFileName = nullptr; std::string newTarget; - // Maximum of 100 errors only applies if rgbasm is printing errors to a terminal. if (isatty(STDERR_FILENO)) maxErrors = 100; @@ -219,16 +220,16 @@ int main(int argc, char *argv[]) { break; case 'M': - if (dependfile) + if (dependFile) warnx("Overriding dependfile %s", dependFileName); if (!strcmp("-", musl_optarg)) { - dependfile = stdout; + dependFile = stdout; dependFileName = ""; } else { - dependfile = fopen(musl_optarg, "w"); + dependFile = fopen(musl_optarg, "w"); dependFileName = musl_optarg; } - if (dependfile == nullptr) + if (dependFile == nullptr) err("Failed to open dependfile \"%s\"", dependFileName); break; @@ -357,12 +358,12 @@ int main(int argc, char *argv[]) { if (verbose) printf("Assembling %s\n", mainFileName.c_str()); - if (dependfile) { + if (dependFile) { if (targetFileName.empty()) errx("Dependency files can only be created if a target file is specified with either " "-o, -MQ or -MT"); - fprintf(dependfile, "%s: %s\n", targetFileName.c_str(), mainFileName.c_str()); + fprintf(dependFile, "%s: %s\n", targetFileName.c_str(), mainFileName.c_str()); } charmap_New(DEFAULT_CHARMAP_NAME, nullptr); @@ -375,9 +376,6 @@ int main(int argc, char *argv[]) { if (parser.parse() != 0 && nbErrors == 0) nbErrors = 1; - if (dependfile) - fclose(dependfile); - sect_CheckUnionClosed(); if (nbErrors != 0) diff --git a/src/asm/output.cpp b/src/asm/output.cpp index 8702c480..b7515904 100644 --- a/src/asm/output.cpp +++ b/src/asm/output.cpp @@ -302,7 +302,7 @@ static void writeFileStackNode(FileStackNode const &node, FILE *file) { } } -// Write an objectfile +// Write an object file void out_WriteObject() { FILE *file; if (objectName != "-") { @@ -352,7 +352,7 @@ void out_WriteObject() { writeassert(assert, file); } -// Set the objectfilename +// Set the object filename void out_SetFileName(std::string const &name) { if (!objectName.empty()) warnx("Overriding output filename %s", objectName.c_str()); diff --git a/src/asm/symbol.cpp b/src/asm/symbol.cpp index d7325eba..85807a68 100644 --- a/src/asm/symbol.cpp +++ b/src/asm/symbol.cpp @@ -426,7 +426,7 @@ Symbol *sym_AddLabel(std::string const &symName) { return sym; } -static uint32_t anonLabelID; +static uint32_t anonLabelID = 0; // Add an anonymous label Symbol *sym_AddAnonLabel() { @@ -533,7 +533,7 @@ void sym_SetExportAll(bool set) { exportAll = set; } -// Initialize the symboltable +// Define the built-in symbols void sym_Init(time_t now) { PCSymbol = &createSymbol("@"s); PCSymbol->type = SYM_LABEL; @@ -598,7 +598,4 @@ void sym_Init(time_t now) { sym_AddEqu("__UTC_HOUR__"s, time_utc->tm_hour)->isBuiltin = true; sym_AddEqu("__UTC_MINUTE__"s, time_utc->tm_min)->isBuiltin = true; sym_AddEqu("__UTC_SECOND__"s, time_utc->tm_sec)->isBuiltin = true; - - labelScope = std::nullopt; - anonLabelID = 0; }