aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGisle Vanem <gvanem@broadpark.no>2008-08-21 16:20:38 +0000
committerGisle Vanem <gvanem@broadpark.no>2008-08-21 16:20:38 +0000
commit17e1f58fd67d630390f6c6bce78e319e8a5831b9 (patch)
tree9a2fb3741f1102be26ebf47b0ef5d9a2e64f7028
parent582833b3389c1cbfbf253bf252828b3525328361 (diff)
Work around a scanf() bug in djgpp 2.04. The assignments for this
format is working okay. But the return value is incorrectly EOF.
-rw-r--r--lib/url.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/lib/url.c b/lib/url.c
index 76603494d..6da9c9ea0 100644
--- a/lib/url.c
+++ b/lib/url.c
@@ -2978,8 +2978,8 @@ static CURLcode ParseURLAndFillConnection(struct SessionHandle *data,
{
char *at;
char *tmp;
-
char *path = data->state.path;
+ int rc;
/*************************************************************
* Parse the URL.
@@ -3052,13 +3052,20 @@ static CURLcode ParseURLAndFillConnection(struct SessionHandle *data,
* The URL was badly formatted, let's try the browser-style _without_
* protocol specified like 'http://'.
*/
- if((1 > sscanf(data->change.url, "%[^\n/]%[^\n]",
- conn->host.name, path)) ) {
+ if(1 > (rc = sscanf(data->change.url, "%[^\n/]%[^\n]",
+ conn->host.name, path)) ) {
/*
* We couldn't even get this format.
+ * djgpp 2.04 has a sscanf() bug where 'conn->host.name' is
+ * assigned, but the return value is EOF!
*/
- failf(data, "<url> malformed");
- return CURLE_URL_MALFORMAT;
+#if defined(__DJGPP__) && (DJGPP_MINOR == 4)
+ if (!(rc == -1 && *conn->host.name))
+#endif
+ {
+ failf(data, "<url> malformed");
+ return CURLE_URL_MALFORMAT;
+ }
}
/*
@@ -3161,7 +3168,7 @@ static CURLcode ParseURLAndFillConnection(struct SessionHandle *data,
* conn->host.name is B
* data->state.path is /C
*/
-
+ (void)rc;
return CURLE_OK;
}
@@ -3652,7 +3659,7 @@ static CURLcode parse_remote_port(struct SessionHandle *data,
if(conn->bits.httpproxy) {
/* we need to create new URL with the new port number */
char *url;
- bool isftp = strequal("ftp", conn->protostr) ||
+ bool isftp = strequal("ftp", conn->protostr) ||
strequal("ftps", conn->protostr);
/*
@@ -3662,7 +3669,7 @@ static CURLcode parse_remote_port(struct SessionHandle *data,
*/
url = aprintf("%s://%s%s%s:%d%s%s", conn->protostr,
conn->bits.ipv6_ip?"[":"", conn->host.name,
- conn->bits.ipv6_ip?"]":"", conn->remote_port,
+ conn->bits.ipv6_ip?"]":"", conn->remote_port,
isftp?"/":"", data->state.path);
if(!url)
return CURLE_OUT_OF_MEMORY;