diff options
author | Tim Rühsen <tim.ruehsen@gmx.de> | 2023-02-17 19:00:18 +0100 |
---|---|---|
committer | Tim Rühsen <tim.ruehsen@gmx.de> | 2023-02-18 17:25:56 +0100 |
commit | 218f6fee30f8138e049ec624ef05456bd5d9e662 (patch) | |
tree | 84a246999dd09de71b1499751ab5528cde763102 | |
parent | 2339d79b05004cbef5863726265d08e1f3b01613 (diff) | |
download | wget-218f6fee30f8138e049ec624ef05456bd5d9e662.tar.gz |
* src/url.c: Refactored url_error()
-rw-r--r-- | src/url.c | 69 |
1 files changed, 36 insertions, 33 deletions
@@ -670,25 +670,28 @@ init_seps (enum url_scheme scheme) return seps; } +enum { + PE_NO_ERROR = 0, + PE_UNSUPPORTED_SCHEME, + PE_MISSING_SCHEME, + PE_INVALID_HOST_NAME, + PE_BAD_PORT_NUMBER, + PE_INVALID_USER_NAME, + PE_UNTERMINATED_IPV6_ADDRESS, + PE_IPV6_NOT_SUPPORTED, + PE_INVALID_IPV6_ADDRESS +}; + static const char *parse_errors[] = { -#define PE_NO_ERROR 0 - N_("No error"), -#define PE_UNSUPPORTED_SCHEME 1 - N_("Unsupported scheme %s"), /* support for format token only here */ -#define PE_MISSING_SCHEME 2 - N_("Scheme missing"), -#define PE_INVALID_HOST_NAME 3 - N_("Invalid host name"), -#define PE_BAD_PORT_NUMBER 4 - N_("Bad port number"), -#define PE_INVALID_USER_NAME 5 - N_("Invalid user name"), -#define PE_UNTERMINATED_IPV6_ADDRESS 6 - N_("Unterminated IPv6 numeric address"), -#define PE_IPV6_NOT_SUPPORTED 7 - N_("IPv6 addresses not supported"), -#define PE_INVALID_IPV6_ADDRESS 8 - N_("Invalid IPv6 numeric address") + [PE_NO_ERROR] = N_("No error"), + // PE_UNSUPPORTED_SCHEME is handled separately in url_error() + [PE_MISSING_SCHEME] = N_("Scheme missing"), + [PE_INVALID_HOST_NAME] = N_("Invalid host name"), + [PE_BAD_PORT_NUMBER] = N_("Bad port number"), + [PE_INVALID_USER_NAME] = N_("Invalid user name"), + [PE_UNTERMINATED_IPV6_ADDRESS] = N_("Unterminated IPv6 numeric address"), + [PE_IPV6_NOT_SUPPORTED] = N_("IPv6 addresses not supported"), + [PE_INVALID_IPV6_ADDRESS] = N_("Invalid IPv6 numeric address") }; /* Parse a URL. @@ -995,24 +998,24 @@ url_error (const char *url, int error_code) { assert (error_code >= 0 && ((size_t) error_code) < countof (parse_errors)); - if (error_code == PE_UNSUPPORTED_SCHEME) + if (error_code != PE_UNSUPPORTED_SCHEME) + return xstrdup (_(parse_errors[error_code])); + + assert (url_has_scheme (url)); + + if (!url_has_scheme (url)) + return xstrdup (_("Unexpected missing scheme")); + + const char *p = strchr (url, ':'); + if (p) { - char *error, *p; - char *scheme = xstrdup (url); - assert (url_has_scheme (url)); - - if ((p = strchr (scheme, ':'))) - *p = '\0'; - if (!c_strcasecmp (scheme, "https")) - error = aprintf (_("HTTPS support not compiled in")); - else - error = aprintf (_(parse_errors[error_code]), quote (scheme)); - xfree (scheme); + if (!c_strncasecmp (url, "https", p - url)) + return xstrdup (_("HTTPS support not compiled in")); - return error; + return aprintf (_("Unsupported scheme %s"), quote_mem (url, url - p)); } - else - return xstrdup (_(parse_errors[error_code])); + + return xstrdup (""); // This should never be reached } /* Split PATH into DIR and FILE. PATH comes from the URL and is |