[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] [gnurl] 137/208: strerror: Preserve Windows error code in s
From: |
gnunet |
Subject: |
[GNUnet-SVN] [gnurl] 137/208: strerror: Preserve Windows error code in some functions |
Date: |
Wed, 09 Aug 2017 17:35:34 +0200 |
This is an automated email from the git hooks/post-receive script.
ng0 pushed a commit to annotated tag gnurl-7.55.0
in repository gnurl.
commit c5e87fdb7a60c1c4ef158a876e730b25be7a0894
Author: Jay Satiro <address@hidden>
AuthorDate: Tue Jul 11 01:53:23 2017 -0400
strerror: Preserve Windows error code in some functions
This is a follow-up to af02162 which removed (SET_)ERRNO macros. That
commit was an earlier draft that I committed by mistake, which was then
remedied by a5834e5 and e909de6, and now this commit. With this commit
there is now no difference between the current code and the changes that
were approved in the final draft.
Thanks-to: Max Dymond, Marcel Raad, Daniel Stenberg, Gisle Vanem
Ref: https://github.com/curl/curl/pull/1589
---
lib/strerror.c | 67 +++++++++++++++++++++++++++++++-------------------
tests/libtest/lib505.c | 7 ++----
tests/libtest/lib525.c | 7 ++----
tests/libtest/lib541.c | 7 ++----
tests/libtest/lib582.c | 7 ++----
tests/libtest/lib591.c | 4 +--
6 files changed, 51 insertions(+), 48 deletions(-)
diff --git a/lib/strerror.c b/lib/strerror.c
index a85c216a5..83a96dda1 100644
--- a/lib/strerror.c
+++ b/lib/strerror.c
@@ -49,6 +49,10 @@
#include "curl_memory.h"
#include "memdebug.h"
+#if defined(WIN32) || defined(_WIN32_WCE)
+#define PRESERVE_WINDOWS_ERROR_CODE
+#endif
+
const char *
curl_easy_strerror(CURLcode error)
{
@@ -432,6 +436,10 @@ curl_share_strerror(CURLSHcode error)
static const char *
get_winsock_error (int err, char *buf, size_t len)
{
+#ifdef PRESERVE_WINDOWS_ERROR_CODE
+ DWORD old_win_err = GetLastError();
+#endif
+ int old_errno = errno;
const char *p;
#ifndef CURL_DISABLE_VERBOSE_STRINGS
@@ -611,6 +619,15 @@ get_winsock_error (int err, char *buf, size_t len)
#endif
strncpy(buf, p, len);
buf [len-1] = '\0';
+
+ if(errno != old_errno)
+ errno = old_errno;
+
+#ifdef PRESERVE_WINDOWS_ERROR_CODE
+ if(old_win_err != GetLastError())
+ SetLastError(old_win_err);
+#endif
+
return buf;
}
#endif /* USE_WINSOCK */
@@ -628,19 +645,16 @@ get_winsock_error (int err, char *buf, size_t len)
*/
const char *Curl_strerror(struct connectdata *conn, int err)
{
+#ifdef PRESERVE_WINDOWS_ERROR_CODE
+ DWORD old_win_err = GetLastError();
+#endif
+ int old_errno = errno;
char *buf, *p;
size_t max;
- int old_errno;
-#ifdef WIN32
- DWORD old_win_err;
-#endif
+
DEBUGASSERT(conn);
DEBUGASSERT(err >= 0);
- old_errno = errno;
-#ifdef WIN32
- old_win_err = GetLastError();
-#endif
buf = conn->syserr_buf;
max = sizeof(conn->syserr_buf)-1;
*buf = '\0';
@@ -727,12 +741,14 @@ const char *Curl_strerror(struct connectdata *conn, int
err)
p = strrchr(buf, '\r');
if(p && (p - buf) >= 1)
*p = '\0';
-#ifdef WIN32
+
+ if(errno != old_errno)
+ errno = old_errno;
+
+#ifdef PRESERVE_WINDOWS_ERROR_CODE
if(old_win_err != GetLastError())
SetLastError(old_win_err);
#endif
- if(errno != old_errno)
- errno = old_errno;
return buf;
}
@@ -740,17 +756,19 @@ const char *Curl_strerror(struct connectdata *conn, int
err)
#ifdef USE_WINDOWS_SSPI
const char *Curl_sspi_strerror (struct connectdata *conn, int err)
{
+#ifdef PRESERVE_WINDOWS_ERROR_CODE
+ DWORD old_win_err = GetLastError();
+#endif
+ int old_errno = errno;
+ const char *txt;
+ char *outbuf;
+ size_t outmax;
#ifndef CURL_DISABLE_VERBOSE_STRINGS
char txtbuf[80];
char msgbuf[sizeof(conn->syserr_buf)];
char *p, *str, *msg = NULL;
bool msg_formatted = FALSE;
- int old_errno;
- DWORD old_win_err;
#endif
- const char *txt;
- char *outbuf;
- size_t outmax;
DEBUGASSERT(conn);
@@ -760,9 +778,6 @@ const char *Curl_sspi_strerror (struct connectdata *conn,
int err)
#ifndef CURL_DISABLE_VERBOSE_STRINGS
- old_errno = errno;
- old_win_err = GetLastError();
-
switch(err) {
case SEC_E_OK:
txt = "No error";
@@ -1062,12 +1077,6 @@ const char *Curl_sspi_strerror (struct connectdata
*conn, int err)
strncpy(outbuf, str, outmax);
}
- if(old_win_err != GetLastError())
- SetLastError(old_win_err);
-
- if(errno != old_errno)
- errno = old_errno;
-
#else
if(err == SEC_E_OK)
@@ -1081,6 +1090,14 @@ const char *Curl_sspi_strerror (struct connectdata
*conn, int err)
outbuf[outmax] = '\0';
+ if(errno != old_errno)
+ errno = old_errno;
+
+#ifdef PRESERVE_WINDOWS_ERROR_CODE
+ if(old_win_err != GetLastError())
+ SetLastError(old_win_err);
+#endif
+
return outbuf;
}
#endif /* USE_WINDOWS_SSPI */
diff --git a/tests/libtest/lib505.c b/tests/libtest/lib505.c
index 0c128c666..ad5d214c6 100644
--- a/tests/libtest/lib505.c
+++ b/tests/libtest/lib505.c
@@ -42,7 +42,6 @@ int test(char *URL)
int hd;
struct_stat file_info;
struct curl_slist *hl;
- int error;
struct curl_slist *headerlist=NULL;
const char *buf_1 = "RNFR 505";
@@ -55,9 +54,8 @@ int test(char *URL)
hd_src = fopen(libtest_arg2, "rb");
if(NULL == hd_src) {
- error = errno;
fprintf(stderr, "fopen failed with error: %d %s\n",
- error, strerror(error));
+ errno, strerror(errno));
fprintf(stderr, "Error opening file: %s\n", libtest_arg2);
return TEST_ERR_MAJOR_BAD; /* if this happens things are major weird */
}
@@ -66,9 +64,8 @@ int test(char *URL)
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));
+ errno, strerror(errno));
fprintf(stderr, "ERROR: cannot open file %s\n", libtest_arg2);
fclose(hd_src);
return TEST_ERR_MAJOR_BAD;
diff --git a/tests/libtest/lib525.c b/tests/libtest/lib525.c
index f468efa25..715b7fbe2 100644
--- a/tests/libtest/lib525.c
+++ b/tests/libtest/lib525.c
@@ -35,7 +35,6 @@ int test(char *URL)
CURL *curl = NULL;
FILE *hd_src = NULL;
int hd;
- int error;
struct_stat file_info;
CURLM *m = NULL;
int running;
@@ -55,9 +54,8 @@ int test(char *URL)
hd_src = fopen(libtest_arg2, "rb");
if(NULL == hd_src) {
- error = errno;
fprintf(stderr, "fopen failed with error: %d (%s)\n",
- error, strerror(error));
+ errno, strerror(errno));
fprintf(stderr, "Error opening file: (%s)\n", libtest_arg2);
return TEST_ERR_FOPEN;
}
@@ -66,9 +64,8 @@ int test(char *URL)
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));
+ errno, strerror(errno));
fprintf(stderr, "ERROR: cannot open file (%s)\n", libtest_arg2);
fclose(hd_src);
return TEST_ERR_FSTAT;
diff --git a/tests/libtest/lib541.c b/tests/libtest/lib541.c
index 9aa4a0826..94a26a4b7 100644
--- a/tests/libtest/lib541.c
+++ b/tests/libtest/lib541.c
@@ -38,7 +38,6 @@ int test(char *URL)
FILE *hd_src;
int hd;
struct_stat file_info;
- int error;
if(!libtest_arg2) {
fprintf(stderr, "Usage: <url> <file-to-upload>\n");
@@ -47,9 +46,8 @@ int test(char *URL)
hd_src = fopen(libtest_arg2, "rb");
if(NULL == hd_src) {
- error = errno;
fprintf(stderr, "fopen failed with error: %d %s\n",
- error, strerror(error));
+ errno, strerror(errno));
fprintf(stderr, "Error opening file: %s\n", libtest_arg2);
return -2; /* if this happens things are major weird */
}
@@ -58,9 +56,8 @@ int test(char *URL)
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));
+ errno, strerror(errno));
fprintf(stderr, "ERROR: cannot open file %s\n", libtest_arg2);
fclose(hd_src);
return TEST_ERR_MAJOR_BAD;
diff --git a/tests/libtest/lib582.c b/tests/libtest/lib582.c
index 23772be59..f55e5de71 100644
--- a/tests/libtest/lib582.c
+++ b/tests/libtest/lib582.c
@@ -228,7 +228,6 @@ int test(char *URL)
CURL *curl = NULL;
FILE *hd_src = NULL;
int hd;
- int error;
struct_stat file_info;
CURLM *m = NULL;
struct ReadWriteSockets sockets = {{NULL, 0, 0}, {NULL, 0, 0}};
@@ -244,9 +243,8 @@ int test(char *URL)
hd_src = fopen(libtest_arg2, "rb");
if(NULL == hd_src) {
- error = errno;
fprintf(stderr, "fopen() failed with error: %d (%s)\n",
- error, strerror(error));
+ errno, strerror(errno));
fprintf(stderr, "Error opening file: (%s)\n", libtest_arg2);
return TEST_ERR_FOPEN;
}
@@ -255,9 +253,8 @@ int test(char *URL)
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));
+ errno, strerror(errno));
fprintf(stderr, "ERROR: cannot open file (%s)\n", libtest_arg2);
fclose(hd_src);
return TEST_ERR_FSTAT;
diff --git a/tests/libtest/lib591.c b/tests/libtest/lib591.c
index c04d3fbae..53ede3fcd 100644
--- a/tests/libtest/lib591.c
+++ b/tests/libtest/lib591.c
@@ -44,15 +44,13 @@ int test(char *URL)
int msgs_left;
CURLMsg *msg;
FILE *upload = NULL;
- int error;
start_test_timing();
upload = fopen(libtest_arg3, "rb");
if(!upload) {
- error = errno;
fprintf(stderr, "fopen() failed with error: %d (%s)\n",
- error, strerror(error));
+ errno, strerror(errno));
fprintf(stderr, "Error opening file: (%s)\n", libtest_arg3);
return TEST_ERR_FOPEN;
}
--
To stop receiving notification emails like this one, please contact
address@hidden
- [GNUnet-SVN] [gnurl] 110/208: http: s/TINY_INITIAL_POST_SIZE/EXPECT_100_THRESHOLD, (continued)
- [GNUnet-SVN] [gnurl] 110/208: http: s/TINY_INITIAL_POST_SIZE/EXPECT_100_THRESHOLD, gnunet, 2017/08/09
- [GNUnet-SVN] [gnurl] 87/208: unit1399: add logging to time comparison, gnunet, 2017/08/09
- [GNUnet-SVN] [gnurl] 98/208: configure: remove checks for 5 functions never used, gnunet, 2017/08/09
- [GNUnet-SVN] [gnurl] 83/208: test1521: fix out-of-tree builds, broken with 467da3af, gnunet, 2017/08/09
- [GNUnet-SVN] [gnurl] 116/208: appveyor: enable CURL_WERROR on all builds, gnunet, 2017/08/09
- [GNUnet-SVN] [gnurl] 115/208: cmake: add CURL_WERROR for enabling "warning as errors", gnunet, 2017/08/09
- [GNUnet-SVN] [gnurl] 121/208: CURLOPT_POSTFIELDS.3: explain the 100-continue magic better, gnunet, 2017/08/09
- [GNUnet-SVN] [gnurl] 94/208: travis.yml: use --enable-werror on debug builds, gnunet, 2017/08/09
- [GNUnet-SVN] [gnurl] 61/208: libtest/Makefile: remove unused lib1541 variables, gnunet, 2017/08/09
- [GNUnet-SVN] [gnurl] 174/208: BUGS: improved phrasing about security bugs, gnunet, 2017/08/09
- [GNUnet-SVN] [gnurl] 137/208: strerror: Preserve Windows error code in some functions,
gnunet <=
- [GNUnet-SVN] [gnurl] 176/208: tests/server/util: fix curltime mistake from 4dee50b9c80f9, gnunet, 2017/08/09
- [GNUnet-SVN] [gnurl] 138/208: curl_setup: always define WIN32_LEAN_AND_MEAN on Windows, gnunet, 2017/08/09
- [GNUnet-SVN] [gnurl] 150/208: rtspd: fix GCC warning after MSVC warning fix, gnunet, 2017/08/09
- [GNUnet-SVN] [gnurl] 36/208: tool_wrte_cb: remove check for config == NULL, gnunet, 2017/08/09
- [GNUnet-SVN] [gnurl] 156/208: multi: mention integer overflow risk if using > 500 million sockets, gnunet, 2017/08/09
- [GNUnet-SVN] [gnurl] 191/208: test1010: verify that #1718 is fixed, gnunet, 2017/08/09
- [GNUnet-SVN] [gnurl] 188/208: travis: BUILD_TYPE => T, gnunet, 2017/08/09
- [GNUnet-SVN] [gnurl] 72/208: libtest/make: generate lib1521.c, gnunet, 2017/08/09
- [GNUnet-SVN] [gnurl] 159/208: test1323: verify curlx_tvdiff, gnunet, 2017/08/09
- [GNUnet-SVN] [gnurl] 42/208: http2: fix OOM crash, gnunet, 2017/08/09