Avoid calling style_Set/Reset before strerror(errno),

since they may call `isatty` which can change `errno`

Fixes #1857
This commit is contained in:
Rangi
2025-11-08 12:06:16 -05:00
parent 395b03e88e
commit 04e3a904c2
3 changed files with 16 additions and 6 deletions

View File

@@ -3,17 +3,14 @@
#ifndef RGBDS_VERBOSITY_HPP
#define RGBDS_VERBOSITY_HPP
#include <stdarg.h>
#include <stdio.h>
#include "style.hpp"
// This macro does not evaluate its arguments unless the condition is true.
#define verbosePrint(level, ...) \
do { \
if (checkVerbosity(level)) { \
style_Set(stderr, STYLE_MAGENTA, false); \
fprintf(stderr, __VA_ARGS__); \
style_Reset(stderr); \
printVerbosely(__VA_ARGS__); \
} \
} while (0)
@@ -30,6 +27,9 @@ enum Verbosity {
void incrementVerbosity();
bool checkVerbosity(Verbosity level);
[[gnu::format(printf, 1, 2)]]
void printVerbosely(char const *fmt, ...);
void printVVVVVVerbosity();
#endif // RGBDS_VERBOSITY_HPP

View File

@@ -21,10 +21,11 @@ static std::vector<size_t>
std::filebuf file;
if (!file.open(path, std::ios_base::in)) {
int errnum = errno;
style_Set(stderr, STYLE_RED, true);
fputs("FATAL: ", stderr);
style_Reset(stderr);
fprintf(stderr, "Failed to open at-file \"%s\": %s\n", path.c_str(), strerror(errno));
fprintf(stderr, "Failed to open at-file \"%s\": %s\n", path.c_str(), strerror(errnum));
usage.printAndExit(1);
}

View File

@@ -24,6 +24,15 @@ void incrementVerbosity() {
}
}
void printVerbosely(char const *fmt, ...) {
va_list args;
style_Set(stderr, STYLE_MAGENTA, false);
va_start(args, fmt);
vfprintf(stderr, fmt, args);
va_end(args);
style_Reset(stderr);
}
void printVVVVVVerbosity() {
if (!checkVerbosity(VERB_VVVVVV)) {
return;