[libgens/tests] TestSuite: Reset errno after calling isatty().
authorDavid Korth <gerbilsoft@gerbilsoft.com>
Sat, 5 Sep 2015 02:41:28 +0000 (22:41 -0400)
committerDavid Korth <gerbilsoft@gerbilsoft.com>
Sat, 5 Sep 2015 02:41:28 +0000 (22:41 -0400)
On POSIX-compliant systems, isatty() sets errno to either EINVAL or
ENOTTY if the specified fd is not a TTY. This can cause problems
later, so reset errno to 0 afterwards.

test_VdpPalette_DAC.cpp::parse_number(): Reset errno to 0 before
calling strtol(), since strtol() only sets errno if an error occurred;
it won't clear errno if no error occurred.

This fixes an issue where the DAC tests didn't run properly when
run using CTest (e.g. 'make test') due to the changes required
for color text output on Windows.

This is a regression from commit 81e684d91685661d09b354c2174167f429970ffe.
([libgens/tests] TestSuite: Added color support on Windows.)

src/libgens/tests/TestSuite.cpp
src/libgens/tests/test_VdpPalette_DAC.cpp

index 85b6010..816199c 100644 (file)
@@ -84,6 +84,11 @@ TestSuite::TestSuite()
                }
 #endif /* _WIN32 */
        }
+
+       // On POSIX-compliant systems, isatty() sets errno to
+       // either EINVAL or ENOTTY if the specified fd is not
+       // a TTY. Clear errno to prevent issues elsewhere.
+       errno = 0;
 }
 
 /**
index fcbe0cf..aec609c 100644 (file)
@@ -48,6 +48,7 @@ template<typename T>
 static inline int parse_number(const char *str, int base, T *pRet)
 {
        char *endptr;
+       errno = 0;
        long ret = strtol(str, &endptr, base);
 
        if (errno != 0 || endptr == str || *endptr != 0x00) {
@@ -449,5 +450,5 @@ int main(int argc, char *argv[])
 
        LibGens::Tests::Test_VdpPalette_DAC vdpTest(argv[1]);
        int ret = vdpTest.exec();
-       return ((ret == 0) ? ret : vdpTest.testsFailed());
+       return ((ret == 0) ? ret : vdpTest.testsFailed())
 }