From 17e1f58fd67d630390f6c6bce78e319e8a5831b9 Mon Sep 17 00:00:00 2001 From: Gisle Vanem Date: Thu, 21 Aug 2008 16:20:38 +0000 Subject: Work around a scanf() bug in djgpp 2.04. The assignments for this format is working okay. But the return value is incorrectly EOF. --- lib/url.c | 23 +++++++++++++++-------- 1 file 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, " malformed"); - return CURLE_URL_MALFORMAT; +#if defined(__DJGPP__) && (DJGPP_MINOR == 4) + if (!(rc == -1 && *conn->host.name)) +#endif + { + failf(data, " 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; -- cgit v1.2.3