lib: Capture errno on entry
authorChris Wilson <chris@chris-wilson.co.uk>
Fri, 31 Jan 2014 16:56:01 +0000 (16:56 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Fri, 31 Jan 2014 16:57:17 +0000 (16:57 +0000)
When printing the errno, it is important that we capture the user errno
before we make any library calls - as they may alter the value.

References: https://bugs.freedesktop.org/show_bug.cgi?id=74007
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
lib/drmtest.c

index 8bc70a3..f7262d7 100644 (file)
@@ -1038,6 +1038,7 @@ void __igt_skip_check(const char *file, const int line,
                      const char *f, ...)
 {
        va_list args;
+       int err = errno;
 
        if (f) {
                static char *buf;
@@ -1053,12 +1054,12 @@ void __igt_skip_check(const char *file, const int line,
                igt_skip("Test requirement not met in function %s, file %s:%i:\n"
                         "Last errno: %i, %s\n"
                         "Test requirement: (%s)\n%s",
-                        func, file, line, errno, strerror(errno), check, buf);
+                        func, file, line, err, strerror(err), check, buf);
        } else {
                igt_skip("Test requirement not met in function %s, file %s:%i:\n"
                         "Last errno: %i, %s\n"
                         "Test requirement: (%s)\n",
-                        func, file, line, errno, strerror(errno), check);
+                        func, file, line, err, strerror(err), check);
        }
 }
 
@@ -1110,11 +1111,12 @@ void __igt_fail_assert(int exitcode, const char *file,
                       const char *f, ...)
 {
        va_list args;
+       int err = errno;
 
        printf("Test assertion failure function %s, file %s:%i:\n"
               "Last errno: %i, %s\n"
               "Failed assertion: %s\n",
-              func, file, line, errno, strerror(errno), assertion);
+              func, file, line, err, strerror(err), assertion);
 
        if (f) {
                va_start(args, f);