summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authori-ky <gl.ivanovsky@gmail.com>2021-09-27 08:22:54 +0200
committerDaniel Stenberg <daniel@haxx.se>2021-09-27 08:28:46 +0200
commit3363eeb26298b9d30fc5ec29101e5dd205d04db9 (patch)
tree5546b8dc873a7e918d651485ed735dbce6f69d62 /lib
parentf0b8d1c5f646506d5c1fbf73edfbed900aa016e4 (diff)
downloadcurl-3363eeb26298b9d30fc5ec29101e5dd205d04db9.tar.gz
urlapi: add curl_url_strerror()
Add curl_url_strerror() to convert CURLUcode into readable string and facilitate easier troubleshooting in programs using URL API. Extend CURLUcode with CURLU_LAST for iteration in unit tests. Update man pages with a mention of new function. Update example code and tests with new functionality where it fits. Closes #7605
Diffstat (limited to 'lib')
-rw-r--r--lib/strerror.c72
-rw-r--r--lib/url.c3
2 files changed, 74 insertions, 1 deletions
diff --git a/lib/strerror.c b/lib/strerror.c
index 8a2719765..31eb2bf79 100644
--- a/lib/strerror.c
+++ b/lib/strerror.c
@@ -453,6 +453,78 @@ curl_share_strerror(CURLSHcode error)
#endif
}
+const char *
+curl_url_strerror(CURLUcode error)
+{
+#ifndef CURL_DISABLE_VERBOSE_STRINGS
+ switch(error) {
+ case CURLUE_OK:
+ return "No error";
+
+ case CURLUE_BAD_HANDLE:
+ return "An invalid CURLU pointer was passed as argument";
+
+ case CURLUE_BAD_PARTPOINTER:
+ return "An invalid 'part' argument was passed as argument";
+
+ case CURLUE_MALFORMED_INPUT:
+ return "A malformed input was passed to a URL API function";
+
+ case CURLUE_BAD_PORT_NUMBER:
+ return "The port number was not a decimal number between 0 and 65535";
+
+ case CURLUE_UNSUPPORTED_SCHEME:
+ return "This libcurl build doesn't support the given URL scheme";
+
+ case CURLUE_URLDECODE:
+ return "URL decode error, most likely because of rubbish in the input";
+
+ case CURLUE_OUT_OF_MEMORY:
+ return "A memory function failed";
+
+ case CURLUE_USER_NOT_ALLOWED:
+ return "Credentials was passed in the URL when prohibited";
+
+ case CURLUE_UNKNOWN_PART:
+ return "An unknown part ID was passed to a URL API function";
+
+ case CURLUE_NO_SCHEME:
+ return "There is no scheme part in the URL";
+
+ case CURLUE_NO_USER:
+ return "There is no user part in the URL";
+
+ case CURLUE_NO_PASSWORD:
+ return "There is no password part in the URL";
+
+ case CURLUE_NO_OPTIONS:
+ return "There is no options part in the URL";
+
+ case CURLUE_NO_HOST:
+ return "There is no host part in the URL";
+
+ case CURLUE_NO_PORT:
+ return "There is no port part in the URL";
+
+ case CURLUE_NO_QUERY:
+ return "There is no query part in the URL";
+
+ case CURLUE_NO_FRAGMENT:
+ return "There is no fragment part in the URL";
+
+ case CURLUE_LAST:
+ break;
+ }
+
+ return "CURLUcode unknown";
+#else
+ if(error == CURLUE_OK)
+ return "No error";
+ else
+ return "Error";
+#endif
+}
+
#ifdef USE_WINSOCK
/* This is a helper function for Curl_strerror that converts Winsock error
* codes (WSAGetLastError) to error messages.
diff --git a/lib/url.c b/lib/url.c
index 37b6c0e84..5c31cadd6 100644
--- a/lib/url.c
+++ b/lib/url.c
@@ -1954,7 +1954,8 @@ static CURLcode parseurlandfillconn(struct Curl_easy *data,
CURLU_DISALLOW_USER : 0) |
(data->set.path_as_is ? CURLU_PATH_AS_IS : 0));
if(uc) {
- DEBUGF(infof(data, "curl_url_set rejected %s", data->state.url));
+ DEBUGF(infof(data, "curl_url_set rejected %s: %s", data->state.url,
+ curl_url_strerror(uc)));
return Curl_uc_to_curlcode(uc);
}