Save and restore the Windows error around TlsGetValue.
[oweals/openssl.git] / test / errtest.c
diff --git a/test/errtest.c b/test/errtest.c
new file mode 100644 (file)
index 0000000..e464d08
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2018 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the OpenSSL license (the "License").  You may not use
+ * this file except in compliance with the License.  You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <openssl/opensslconf.h>
+#include <openssl/err.h>
+
+#include "testutil.h"
+
+#if defined(OPENSSL_SYS_WINDOWS)
+# include <windows.h>
+#else
+# include <errno.h>
+#endif
+
+/* Test that querying the error queue preserves the OS error. */
+static int preserves_system_error(void)
+{
+#if defined(OPENSSL_SYS_WINDOWS)
+    SetLastError(ERROR_INVALID_FUNCTION);
+    ERR_get_error();
+    return TEST_int_eq(GetLastError(), ERROR_INVALID_FUNCTION);
+#else
+    errno = EINVAL;
+    ERR_get_error();
+    return TEST_int_eq(errno, EINVAL);
+#endif
+}
+
+int setup_tests(void)
+{
+    ADD_TEST(preserves_system_error);
+    return 1;
+}