diff options
author | Nikita Slyusarev <nslus@yandex-team.com> | 2022-02-10 16:46:53 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:46:53 +0300 |
commit | 469afdc4e2587bf62ecdd096b75a0baa444c4012 (patch) | |
tree | 49e222ea1c5804306084bb3ae065bb702625360f /contrib/libs/curl/lib/gopher.c | |
parent | cd77cecfc03a3eaf87816af28a33067c4f0cdb59 (diff) | |
download | ydb-469afdc4e2587bf62ecdd096b75a0baa444c4012.tar.gz |
Restoring authorship annotation for Nikita Slyusarev <nslus@yandex-team.com>. Commit 2 of 2.
Diffstat (limited to 'contrib/libs/curl/lib/gopher.c')
-rw-r--r-- | contrib/libs/curl/lib/gopher.c | 232 |
1 files changed, 116 insertions, 116 deletions
diff --git a/contrib/libs/curl/lib/gopher.c b/contrib/libs/curl/lib/gopher.c index 3f02af341d..b101c0ab68 100644 --- a/contrib/libs/curl/lib/gopher.c +++ b/contrib/libs/curl/lib/gopher.c @@ -1,97 +1,97 @@ -/*************************************************************************** - * _ _ ____ _ - * Project ___| | | | _ \| | - * / __| | | | |_) | | - * | (__| |_| | _ <| |___ - * \___|\___/|_| \_\_____| - * +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al. - * - * This software is licensed as described in the file COPYING, which - * you should have received as part of this distribution. The terms + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms * are also available at https://curl.se/docs/copyright.html. - * - * You may opt to use, copy, modify, merge, publish, distribute and/or sell - * copies of the Software, and permit persons to whom the Software is - * furnished to do so, under the terms of the COPYING file. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ***************************************************************************/ - -#include "curl_setup.h" - -#ifndef CURL_DISABLE_GOPHER - -#include "urldata.h" -#include <curl/curl.h> -#include "transfer.h" -#include "sendf.h" + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ + +#include "curl_setup.h" + +#ifndef CURL_DISABLE_GOPHER + +#include "urldata.h" +#include <curl/curl.h> +#include "transfer.h" +#include "sendf.h" #include "connect.h" -#include "progress.h" -#include "gopher.h" -#include "select.h" +#include "progress.h" +#include "gopher.h" +#include "select.h" #include "strdup.h" -#include "url.h" +#include "url.h" #include "escape.h" -#include "warnless.h" +#include "warnless.h" #include "curl_printf.h" -#include "curl_memory.h" -/* The last #include file should be: */ -#include "memdebug.h" - -/* - * Forward declarations. - */ - -static CURLcode gopher_do(struct connectdata *conn, bool *done); - -/* - * Gopher protocol handler. - * This is also a nice simple template to build off for simple - * connect-command-download protocols. - */ - -const struct Curl_handler Curl_handler_gopher = { - "GOPHER", /* scheme */ - ZERO_NULL, /* setup_connection */ - gopher_do, /* do_it */ - ZERO_NULL, /* done */ - ZERO_NULL, /* do_more */ - ZERO_NULL, /* connect_it */ - ZERO_NULL, /* connecting */ - ZERO_NULL, /* doing */ - ZERO_NULL, /* proto_getsock */ - ZERO_NULL, /* doing_getsock */ - ZERO_NULL, /* domore_getsock */ - ZERO_NULL, /* perform_getsock */ - ZERO_NULL, /* disconnect */ - ZERO_NULL, /* readwrite */ +#include "curl_memory.h" +/* The last #include file should be: */ +#include "memdebug.h" + +/* + * Forward declarations. + */ + +static CURLcode gopher_do(struct connectdata *conn, bool *done); + +/* + * Gopher protocol handler. + * This is also a nice simple template to build off for simple + * connect-command-download protocols. + */ + +const struct Curl_handler Curl_handler_gopher = { + "GOPHER", /* scheme */ + ZERO_NULL, /* setup_connection */ + gopher_do, /* do_it */ + ZERO_NULL, /* done */ + ZERO_NULL, /* do_more */ + ZERO_NULL, /* connect_it */ + ZERO_NULL, /* connecting */ + ZERO_NULL, /* doing */ + ZERO_NULL, /* proto_getsock */ + ZERO_NULL, /* doing_getsock */ + ZERO_NULL, /* domore_getsock */ + ZERO_NULL, /* perform_getsock */ + ZERO_NULL, /* disconnect */ + ZERO_NULL, /* readwrite */ ZERO_NULL, /* connection_check */ - PORT_GOPHER, /* defport */ - CURLPROTO_GOPHER, /* protocol */ + PORT_GOPHER, /* defport */ + CURLPROTO_GOPHER, /* protocol */ CURLPROTO_GOPHER, /* family */ - PROTOPT_NONE /* flags */ -}; - -static CURLcode gopher_do(struct connectdata *conn, bool *done) -{ + PROTOPT_NONE /* flags */ +}; + +static CURLcode gopher_do(struct connectdata *conn, bool *done) +{ CURLcode result = CURLE_OK; struct Curl_easy *data = conn->data; - curl_socket_t sockfd = conn->sock[FIRSTSOCKET]; + curl_socket_t sockfd = conn->sock[FIRSTSOCKET]; char *gopherpath; char *path = data->state.up.path; char *query = data->state.up.query; char *sel = NULL; - char *sel_org = NULL; + char *sel_org = NULL; timediff_t timeout_ms; - ssize_t amount, k; + ssize_t amount, k; size_t len; int what; - - *done = TRUE; /* unconditionally */ - + + *done = TRUE; /* unconditionally */ + /* path is guaranteed non-NULL */ DEBUGASSERT(path); @@ -103,41 +103,41 @@ static CURLcode gopher_do(struct connectdata *conn, bool *done) if(!gopherpath) return CURLE_OUT_OF_MEMORY; - /* Create selector. Degenerate cases: / and /1 => convert to "" */ + /* Create selector. Degenerate cases: / and /1 => convert to "" */ if(strlen(gopherpath) <= 2) { - sel = (char *)""; + sel = (char *)""; len = strlen(sel); free(gopherpath); } - else { - char *newp; - - /* Otherwise, drop / and the first character (i.e., item type) ... */ + else { + char *newp; + + /* Otherwise, drop / and the first character (i.e., item type) ... */ newp = gopherpath; newp += 2; - - /* ... and finally unescape */ + + /* ... and finally unescape */ result = Curl_urldecode(data, newp, 0, &sel, &len, REJECT_ZERO); free(gopherpath); if(result) return result; - sel_org = sel; - } - + sel_org = sel; + } + k = curlx_uztosz(len); - - for(;;) { - result = Curl_write(conn, sockfd, sel, k, &amount); + + for(;;) { + 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); + result = Curl_client_write(conn, CLIENTWRITE_HEADER, sel, amount); if(result) break; - k -= amount; - sel += amount; - if(k < 1) - break; /* but it did write it all */ - } + k -= amount; + sel += amount; + if(k < 1) + break; /* but it did write it all */ + } else break; @@ -149,12 +149,12 @@ static CURLcode gopher_do(struct connectdata *conn, bool *done) if(!timeout_ms) timeout_ms = TIMEDIFF_T_MAX; - /* 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 - possible to send now will be sent in the doing function repeatedly - until the entire request is sent. - */ + /* 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 + possible to send now will be sent in the doing function repeatedly + until the entire request is sent. + */ what = SOCKET_WRITABLE(sockfd, timeout_ms); if(what < 0) { result = CURLE_SEND_ERROR; @@ -164,21 +164,21 @@ static CURLcode gopher_do(struct connectdata *conn, bool *done) result = CURLE_OPERATION_TIMEDOUT; break; } - } - + } + free(sel_org); - + if(!result) result = Curl_write(conn, sockfd, "\r\n", 2, &amount); if(result) { - failf(data, "Failed sending Gopher request"); - return result; - } - result = Curl_client_write(conn, CLIENTWRITE_HEADER, (char *)"\r\n", 2); - if(result) - return result; - + failf(data, "Failed sending Gopher request"); + return result; + } + result = Curl_client_write(conn, CLIENTWRITE_HEADER, (char *)"\r\n", 2); + if(result) + return result; + Curl_setup_transfer(data, FIRSTSOCKET, -1, FALSE, -1); - return CURLE_OK; -} -#endif /*CURL_DISABLE_GOPHER*/ + return CURLE_OK; +} +#endif /*CURL_DISABLE_GOPHER*/ |