diff --git a/src/test/thread/thread_test.c b/src/test/thread/thread_test.c index 2271ba6561..6fef840d52 100644 --- a/src/test/thread/thread_test.c +++ b/src/test/thread/thread_test.c @@ -263,6 +263,9 @@ main(int argc, char *argv[]) } } +/* + * func_call_1 + */ static void func_call_1(void) { @@ -272,23 +275,38 @@ func_call_1(void) void *p; #endif #ifdef WIN32 - HANDLE h1, h2; + HANDLE h1; +#else + int fd; #endif unlink(TEMP_FILENAME_1); + /* Set errno = EEXIST */ + /* create, then try to fail on exclusive create open */ #ifdef WIN32 - h1 = CreateFile(TEMP_FILENAME_1, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, 0, NULL); - h2 = CreateFile(TEMP_FILENAME_1, GENERIC_WRITE, 0, NULL, CREATE_NEW, 0, NULL); - if (h1 == INVALID_HANDLE_VALUE || GetLastError() != ERROR_FILE_EXISTS) + if ((h1 = CreateFile(TEMP_FILENAME_1, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, 0, NULL)) == + INVALID_HANDLE_VALUE) #else - if (open(TEMP_FILENAME_1, O_RDWR | O_CREAT, 0600) < 0 || - open(TEMP_FILENAME_1, O_RDWR | O_CREAT | O_EXCL, 0600) >= 0) + if ((fd = open(TEMP_FILENAME_1, O_RDWR | O_CREAT, 0600)) < 0) #endif { - fprintf(stderr, "Could not create file in current directory or\n"); - fprintf(stderr, "could not generate failure for create file in current directory **\nexiting\n"); + fprintf(stderr, "Could not create file %s in current directory\n", + TEMP_FILENAME_1); + exit(1); + } + +#ifdef WIN32 + if (CreateFile(TEMP_FILENAME_1, GENERIC_WRITE, 0, NULL, CREATE_NEW, 0, NULL) + != INVALID_HANDLE_VALUE || GetLastError() != ERROR_FILE_EXISTS) +#else + if (open(TEMP_FILENAME_1, O_RDWR | O_CREAT | O_EXCL, 0600) >= 0) +#endif + { + fprintf(stderr, + "Could not generate failure for exclusive file create of %s in current directory **\nexiting\n", + TEMP_FILENAME_1); exit(1); } @@ -315,6 +333,11 @@ func_call_1(void) exit(1); } +#ifdef WIN32 + CloseHandle(h1); +#else + close(fd); +#endif unlink(TEMP_FILENAME_1); #ifndef HAVE_STRERROR_R @@ -352,6 +375,9 @@ func_call_1(void) } +/* + * func_call_2 + */ static void func_call_2(void) { @@ -363,15 +389,14 @@ func_call_2(void) unlink(TEMP_FILENAME_2); - /* open non-existant file */ -#ifdef WIN32 - CreateFile(TEMP_FILENAME_2, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); - if (GetLastError() != ERROR_FILE_NOT_FOUND) -#else - if (open(TEMP_FILENAME_2, O_RDONLY, 0600) >= 0) -#endif + /* Set errno = ENOENT */ + + /* This will fail, but we can't check errno yet */ + if (unlink(TEMP_FILENAME_2) != -1) { - fprintf(stderr, "Read-only open succeeded without create **\nexiting\n"); + fprintf(stderr, + "Could not generate failure for unlink of %s in current directory **\nexiting\n", + TEMP_FILENAME_2); exit(1); } @@ -394,12 +419,9 @@ func_call_2(void) #else fprintf(stderr, "errno not thread-safe **\nexiting\n"); #endif - unlink(TEMP_FILENAME_2); exit(1); } - unlink(TEMP_FILENAME_2); - #ifndef HAVE_STRERROR_R /* * If strerror() uses sys_errlist, the pointer might change for different