From f38510f4b59edad8ae6e8f1535ea3ffcd31fa5d4 Mon Sep 17 00:00:00 2001 From: Dan Fandrich Date: Tue, 6 Apr 2010 22:51:05 -0700 Subject: [PATCH] Eliminated an unlikely race condition in some tests. Based on a patch from the FreeBSD ports by Peter Pentchev. --- tests/libtest/lib505.c | 31 +++++++++++++++---------------- tests/libtest/lib525.c | 20 ++++++++++++-------- tests/libtest/lib541.c | 31 +++++++++++++++---------------- 3 files changed, 42 insertions(+), 40 deletions(-) diff --git a/tests/libtest/lib505.c b/tests/libtest/lib505.c index 9dfae84..5af7ac0 100644 --- a/tests/libtest/lib505.c +++ b/tests/libtest/lib505.c @@ -54,34 +54,33 @@ int test(char *URL) return -1; } + hd_src = fopen(libtest_arg2, "rb"); + if(NULL == hd_src) { + error = ERRNO; + fprintf(stderr, "fopen() failed with error: %d %s\n", + error, strerror(error)); + fprintf(stderr, "Error opening file: %s\n", libtest_arg2); + return -2; /* if this happens things are major weird */ + } + /* get the file size of the local file */ - hd = stat(libtest_arg2, &file_info); + hd = fstat(fileno(hd_src), &file_info); if(hd == -1) { /* can't open file, bail out */ error = ERRNO; - fprintf(stderr, "stat() failed with error: %d %s\n", + fprintf(stderr, "fstat() failed with error: %d %s\n", error, strerror(error)); - fprintf(stderr, "WARNING: cannot open file %s\n", libtest_arg2); + fprintf(stderr, "ERROR: cannot open file %s\n", libtest_arg2); + fclose(hd_src); return -1; } if(! file_info.st_size) { - fprintf(stderr, "WARNING: file %s has no size!\n", libtest_arg2); + fprintf(stderr, "ERROR: file %s has zero size!\n", libtest_arg2); + fclose(hd_src); return -4; } - /* get a FILE * of the same file, could also be made with - fdopen() from the previous descriptor, but hey this is just - an example! */ - hd_src = fopen(libtest_arg2, "rb"); - if(NULL == hd_src) { - error = ERRNO; - fprintf(stderr, "fopen() failed with error: %d %s\n", - error, strerror(error)); - fprintf(stderr, "Error opening file: %s\n", libtest_arg2); - return -2; /* if this happens things are major weird */ - } - if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) { fprintf(stderr, "curl_global_init() failed\n"); fclose(hd_src); diff --git a/tests/libtest/lib525.c b/tests/libtest/lib525.c index d254257..ade6370 100644 --- a/tests/libtest/lib525.c +++ b/tests/libtest/lib525.c @@ -40,14 +40,6 @@ int test(char *URL) return -1; } - /* get the file size of the local file */ - hd = open(libtest_arg2, O_RDONLY) ; - fstat(hd, &file_info); - close(hd) ; - - /* get a FILE * of the same file, could also be made with - fdopen() from the previous descriptor, but hey this is just - an example! */ hd_src = fopen(libtest_arg2, "rb"); if(NULL == hd_src) { error = ERRNO; @@ -57,6 +49,18 @@ int test(char *URL) return TEST_ERR_MAJOR_BAD; } + /* get the file size of the local file */ + hd = fstat(fileno(hd_src), &file_info); + if(hd == -1) { + /* can't open file, bail out */ + error = ERRNO; + fprintf(stderr, "fstat() failed with error: %d %s\n", + error, strerror(error)); + fprintf(stderr, "ERROR: cannot open file %s\n", libtest_arg2); + fclose(hd_src); + return -1; + } + if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) { fprintf(stderr, "curl_global_init() failed\n"); fclose(hd_src); diff --git a/tests/libtest/lib541.c b/tests/libtest/lib541.c index c060b8a..2fc85b9 100644 --- a/tests/libtest/lib541.c +++ b/tests/libtest/lib541.c @@ -46,34 +46,33 @@ int test(char *URL) return -1; } + hd_src = fopen(libtest_arg2, "rb"); + if(NULL == hd_src) { + error = ERRNO; + fprintf(stderr, "fopen() failed with error: %d %s\n", + error, strerror(error)); + fprintf(stderr, "Error opening file: %s\n", libtest_arg2); + return -2; /* if this happens things are major weird */ + } + /* get the file size of the local file */ - hd = stat(libtest_arg2, &file_info); + hd = fstat(fileno(hd_src), &file_info); if(hd == -1) { /* can't open file, bail out */ error = ERRNO; - fprintf(stderr, "stat() failed with error: %d %s\n", + fprintf(stderr, "fstat() failed with error: %d %s\n", error, strerror(error)); - fprintf(stderr, "WARNING: cannot open file %s\n", libtest_arg2); + fprintf(stderr, "ERROR: cannot open file %s\n", libtest_arg2); + fclose(hd_src); return -1; } if(! file_info.st_size) { - fprintf(stderr, "WARNING: file %s has no size!\n", libtest_arg2); + fprintf(stderr, "ERROR: file %s has zero size!\n", libtest_arg2); + fclose(hd_src); return -4; } - /* get a FILE * of the same file, could also be made with - fdopen() from the previous descriptor, but hey this is just - an example! */ - hd_src = fopen(libtest_arg2, "rb"); - if(NULL == hd_src) { - error = ERRNO; - fprintf(stderr, "fopen() failed with error: %d %s\n", - error, strerror(error)); - fprintf(stderr, "Error opening file: %s\n", libtest_arg2); - return -2; /* if this happens things are major weird */ - } - if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) { fprintf(stderr, "curl_global_init() failed\n"); fclose(hd_src); -- 2.7.4