diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2023-01-29 20:35:45 +0100 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2023-01-29 20:35:45 +0100 |
commit | 37c5b6d929bd6acd0f64467ccbd8a298a77ad98a (patch) | |
tree | 4c137629dbce0c809464ae59587667705c62df25 /winsup/utils | |
parent | c061551c67ec1155981eccf642c48d5701624dba (diff) | |
download | newlib-37c5b6d929bd6acd0f64467ccbd8a298a77ad98a.zip newlib-37c5b6d929bd6acd0f64467ccbd8a298a77ad98a.tar.gz newlib-37c5b6d929bd6acd0f64467ccbd8a298a77ad98a.tar.bz2 |
Cygwin: cygcheck: find_url: fix error handling
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
Diffstat (limited to 'winsup/utils')
-rw-r--r-- | winsup/utils/mingw/cygcheck.cc | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/winsup/utils/mingw/cygcheck.cc b/winsup/utils/mingw/cygcheck.cc index f410717..7773473 100644 --- a/winsup/utils/mingw/cygcheck.cc +++ b/winsup/utils/mingw/cygcheck.cc @@ -2050,6 +2050,7 @@ fetch_url (const char *url, FILE *outstream) HINTERNET hi = NULL, hurl = NULL; char buf[4096]; DWORD numread; + int ret; /* Connect to the net and open the URL. */ if (InternetAttemptConnect (0) != ERROR_SUCCESS) @@ -2064,34 +2065,49 @@ fetch_url (const char *url, FILE *outstream) return display_internet_error ("InternetOpen() failed", NULL); if (!(hurl = InternetOpenUrlA (hi, url, NULL, 0, 0, 0))) - return display_internet_error ("unable to contact cygwin.com site, " - "InternetOpenUrl() failed", hi, NULL); + { + ret = display_internet_error ("unable to contact cygwin.com site, " + "InternetOpenUrl() failed", hi, NULL); + goto out_open; + } /* Check the HTTP response code. */ if (!HttpQueryInfoA (hurl, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, (void *) &rc, &rc_s, NULL)) - return display_internet_error ("HttpQueryInfo() failed", hurl, hi, NULL); + { + ret = display_internet_error ("HttpQueryInfo() failed", hurl, hi, NULL); + goto out_open_url; + } + + if (rc != HTTP_STATUS_OK) + { + sprintf (buf, "error retrieving results from cygwin.com site, " + "HTTP status code %lu", rc); + ret = display_internet_error (buf, hurl, hi, NULL); + goto out_open_url; + } /* Fetch result and print to outstream. */ do { if (!InternetReadFile (hurl, (void *) buf, sizeof (buf), &numread)) - return display_internet_error ("InternetReadFile failed", hurl, hi, NULL); + { + ret = display_internet_error ("InternetReadFile failed", hurl, hi, + NULL); + goto out_open_url; + } if (numread) fwrite ((void *) buf, (size_t) numread, 1, outstream); } while (numread); - if (rc != HTTP_STATUS_OK) - { - sprintf (buf, "error retrieving results from cygwin.com site, " - "HTTP status code %lu", rc); - return display_internet_error (buf, hurl, hi, NULL); - } + ret = 0; +out_open_url: InternetCloseHandle (hurl); +out_open: InternetCloseHandle (hi); - return 0; + return ret; } struct passwd { |