summaryrefslogtreecommitdiff
path: root/lib/gopher.c
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2016-10-18 11:12:03 +0200
committerDaniel Stenberg <daniel@haxx.se>2016-10-18 11:14:48 +0200
commit9a509680f6b9f7d7fd2ef99380e2460a3973f31d (patch)
tree79b65a04b1ea4eecb139322fec437ff7f121a543 /lib/gopher.c
parent8a6e89a9ebbaa79a2c4e4301774770efb3d24ef7 (diff)
downloadcurl-9a509680f6b9f7d7fd2ef99380e2460a3973f31d.tar.gz
gopher: properly return error for poll failures
Diffstat (limited to 'lib/gopher.c')
-rw-r--r--lib/gopher.c27
1 files changed, 14 insertions, 13 deletions
diff --git a/lib/gopher.c b/lib/gopher.c
index f16389e09..dcdd93fbb 100644
--- a/lib/gopher.c
+++ b/lib/gopher.c
@@ -121,20 +121,17 @@ static CURLcode gopher_do(struct connectdata *conn, bool *done)
result = Curl_write(conn, sockfd, sel, k, &amount);
if(!result) { /* Which may not have written it all! */
result = Curl_client_write(conn, CLIENTWRITE_HEADER, sel, amount);
- if(result) {
- free(sel_org);
- return result;
- }
+ if(result)
+ break;
+
k -= amount;
sel += amount;
if(k < 1)
break; /* but it did write it all */
}
- else {
- failf(data, "Failed sending Gopher request");
- free(sel_org);
- return result;
- }
+ else
+ break;
+
/* Don't busyloop. The entire loop thing is a work-around as it causes a
BLOCKING behavior which is a NO-NO. This function should rather be
split up in a do and a doing piece where the pieces that aren't
@@ -144,14 +141,18 @@ static CURLcode gopher_do(struct connectdata *conn, bool *done)
Wait a while for the socket to be writable. Note that this doesn't
acknowledge the timeout.
*/
- SOCKET_WRITABLE(sockfd, 100);
+ if(SOCKET_WRITABLE(sockfd, 100) < 0) {
+ result = CURLE_SEND_ERROR;
+ break;
+ }
}
free(sel_org);
- /* We can use Curl_sendf to send the terminal \r\n relatively safely and
- save allocing another string/doing another _write loop. */
- result = Curl_sendf(sockfd, conn, "\r\n");
+ if(!result)
+ /* We can use Curl_sendf to send the terminal \r\n relatively safely and
+ save allocing another string/doing another _write loop. */
+ result = Curl_sendf(sockfd, conn, "\r\n");
if(result) {
failf(data, "Failed sending Gopher request");
return result;