On Fri, 8 Oct 2010 16:13:08 -0300 Raphael Kubo da Costa <k...@profusion.mobi> said:
this already seems to be in svn. :) > Depending on the option being set by curl_easy_setopt, a return value > different from CURL_OK can be returned (the same applies to curl_multi_* > and CURLM_OK). > > This commit checks the return value from those calls and usually > displays an error message with ERR() and returns -- in some cases, an > error is shown but the function does not immediately return. > > A few lines of code have also been moved around in order to make > returning from functions as harmless as possible. > --- > src/lib/ecore_con/ecore_con_url.c | 132 ++++++++++++++++++++++++++++ > +-------- 1 files changed, 103 insertions(+), 29 deletions(-) > > diff --git a/src/lib/ecore_con/ecore_con_url.c > b/src/lib/ecore_con/ecore_con_url.c index be64054..e1b7935 100644 > --- a/src/lib/ecore_con/ecore_con_url.c > +++ b/src/lib/ecore_con/ecore_con_url.c > @@ -253,6 +253,7 @@ ecore_con_url_new(const char *url) > { > #ifdef HAVE_CURL > Ecore_Con_Url *url_con; > + CURLcode ret; > > if (!_init_count) > return NULL; > @@ -261,6 +262,9 @@ ecore_con_url_new(const char *url) > if (!url_con) > return NULL; > > + url_con->fd = -1; > + url_con->write_fd = -1; > + > url_con->curl_easy = curl_easy_init(); > if (!url_con->curl_easy) > { > @@ -270,7 +274,20 @@ ecore_con_url_new(const char *url) > > ECORE_MAGIC_SET(url_con, ECORE_MAGIC_CON_URL); > > - ecore_con_url_url_set(url_con, url); > + if (!ecore_con_url_url_set(url_con, url)) > + { > + ecore_con_url_free(url_con); > + return NULL; > + } > + > + ret = curl_easy_setopt(url_con->curl_easy, CURLOPT_ENCODING, > "gzip,deflate"); > + if (ret != CURLE_OK) > + { > + ERR("Could not set CURLOPT_ENCODING to \"gzip,deflate\": %s", > + curl_easy_strerror(ret)); > + ecore_con_url_free(url_con); > + return NULL; > + } > > curl_easy_setopt(url_con->curl_easy, CURLOPT_WRITEFUNCTION, > _ecore_con_url_data_cb); > @@ -293,13 +310,6 @@ ecore_con_url_new(const char *url) > curl_easy_setopt(url_con->curl_easy, CURLOPT_TIMEOUT, 300); > curl_easy_setopt(url_con->curl_easy, CURLOPT_FOLLOWLOCATION, 1); > > - curl_easy_setopt(url_con->curl_easy, CURLOPT_ENCODING, > "gzip,deflate"); - > - url_con->fd = -1; > - url_con->write_fd = -1; > - url_con->additional_headers = NULL; > - url_con->response_headers = NULL; > - > return url_con; > #else > return NULL; > @@ -328,6 +338,7 @@ ecore_con_url_custom_new(const char *url, const char > *custom_request) { > #ifdef HAVE_CURL > Ecore_Con_Url *url_con; > + CURLcode ret; > > if (!url) > return NULL; > @@ -340,7 +351,14 @@ ecore_con_url_custom_new(const char *url, const char > *custom_request) if (!url_con) > return NULL; > > - curl_easy_setopt(url_con->curl_easy, CURLOPT_CUSTOMREQUEST, > custom_request); > + ret = curl_easy_setopt(url_con->curl_easy, CURLOPT_CUSTOMREQUEST, > custom_request); > + if (ret != CURLE_OK) > + { > + ERR("Could not set a custom request string: %s", > + curl_easy_strerror(ret)); > + ecore_con_url_free(url_con); > + return NULL; > + } > > return url_con; > #else > @@ -362,6 +380,7 @@ ecore_con_url_free(Ecore_Con_Url *url_con) > { > #ifdef HAVE_CURL > char *s; > + CURLMcode ret; > > if (!url_con) > return; > @@ -398,7 +417,10 @@ ecore_con_url_free(Ecore_Con_Url *url_con) > { > url_con->active = EINA_FALSE; > > - curl_multi_remove_handle(_curlm, url_con->curl_easy); > + ret = curl_multi_remove_handle(_curlm, url_con->curl_easy); > + if (ret != CURLM_OK) > + ERR("curl_multi_remove_handle failed: %s", > + curl_multi_strerror(ret)); > } > > curl_easy_cleanup(url_con->curl_easy); > @@ -534,7 +556,7 @@ ecore_con_url_additional_header_add(Ecore_Con_Url > *url_con, const char *key, > #endif > } > > -/* > +/** > * Cleans additional headers. > * > * Cleans additional headers associated with a connection object (previously > @@ -713,10 +735,11 @@ ecore_con_url_response_headers_get(Ecore_Con_Url > *url_con) */ > EAPI Eina_Bool > ecore_con_url_httpauth_set(Ecore_Con_Url *url_con, const char *username, > - const char *password, > - Eina_Bool safe) > + const char *password, Eina_Bool safe) > { > #ifdef HAVE_CURL > + CURLcode ret; > + > if (!ECORE_MAGIC_CHECK(url_con, ECORE_MAGIC_CON_URL)) > { > ECORE_MAGIC_FAIL(url_con, ECORE_MAGIC_CON_URL, > @@ -733,13 +756,27 @@ ecore_con_url_httpauth_set(Ecore_Con_Url *url_con, > const char *username, else > curl_easy_setopt(url_con->curl_easy, CURLOPT_HTTPAUTH, > CURLAUTH_ANY); > - curl_easy_setopt(url_con->curl_easy, CURLOPT_USERNAME, username); > - curl_easy_setopt(url_con->curl_easy, CURLOPT_PASSWORD, password); > + ret = curl_easy_setopt(url_con->curl_easy, CURLOPT_USERNAME, > username); > + if (ret != CURLE_OK) > + { > + ERR("Could not set username for HTTP authentication: %s", > + curl_easy_strerror(ret)); > + return EINA_FALSE; > + } > + > + ret = curl_easy_setopt(url_con->curl_easy, CURLOPT_PASSWORD, > password); > + if (ret != CURLE_OK) > + { > + ERR("Could not set password for HTTP authentication: %s", > + curl_easy_strerror(ret)); > + return EINA_FALSE; > + } > + > return EINA_TRUE; > } > - > # endif > #endif > + > return EINA_FALSE; > } > > @@ -802,7 +839,7 @@ ecore_con_url_send(Ecore_Con_Url *url_con, const void > *data, size_t length, url_con->headers = curl_slist_append(url_con->headers, > tmp); } > > - sprintf(tmp, "Content-length: %zu", length); > + sprintf(tmp, "Content-length: %zu", length); > url_con->headers = curl_slist_append(url_con->headers, tmp); > } > > @@ -871,6 +908,7 @@ ecore_con_url_ftp_upload(Ecore_Con_Url *url_con, const > char *filename, char userpwd[4096]; > FILE *fd; > struct stat file_info; > + CURLcode ret; > > if (!ECORE_MAGIC_CHECK(url_con, ECORE_MAGIC_CON_URL)) > { > @@ -888,14 +926,21 @@ ecore_con_url_ftp_upload(Ecore_Con_Url *url_con, const > char *filename, > if (filename) > { > - char tmp[PATH_MAX]; > - > - snprintf(tmp, PATH_MAX, "%s", filename); > - > if (stat(filename, &file_info)) > return EINA_FALSE; > > - fd = fopen(filename, "rb"); > + snprintf(userpwd, sizeof(userpwd), "%s:%s", user, pass); > + ret = curl_easy_setopt(url_con->curl_easy, CURLOPT_USERPWD, userpwd); > + if (ret != CURLE_OK) > + { > + ERR("Could not set username and password for FTP upload: %s", > + curl_easy_strerror(ret)); > + return EINA_FALSE; > + } > + > + char tmp[PATH_MAX]; > + snprintf(tmp, PATH_MAX, "%s", filename); > + > if (upload_dir) > snprintf(url, sizeof(url), "ftp://%s/%s/%s", url_con->url, > upload_dir, basename(tmp)); > @@ -903,15 +948,22 @@ ecore_con_url_ftp_upload(Ecore_Con_Url *url_con, const > char *filename, snprintf(url, sizeof(url), "ftp://%s/%s", url_con->url, > basename(tmp)); > > - snprintf(userpwd, sizeof(userpwd), "%s:%s", user, pass); > + if (!ecore_con_url_url_set(url_con, url)) > + return EINA_FALSE; > + > curl_easy_setopt(url_con->curl_easy, CURLOPT_INFILESIZE_LARGE, > (curl_off_t)file_info.st_size); > - curl_easy_setopt(url_con->curl_easy, CURLOPT_USERPWD, userpwd); > curl_easy_setopt(url_con->curl_easy, CURLOPT_UPLOAD, 1); > curl_easy_setopt(url_con->curl_easy, CURLOPT_READFUNCTION, > _ecore_con_url_read_cb); > + > + fd = fopen(filename, "rb"); > + if (!fd) > + { > + ERR("Could not open \"%s\" for FTP upload"); > + return EINA_FALSE; > + } > curl_easy_setopt(url_con->curl_easy, CURLOPT_READDATA, fd); > - ecore_con_url_url_set(url_con, url); > > return _ecore_con_url_perform(url_con); > } > @@ -1218,6 +1270,7 @@ _ecore_con_url_perform(Ecore_Con_Url *url_con) > int fd_max, fd; > int flags, still_running; > int completed_immediately = 0; > + CURLMcode ret; > > _url_con_list = eina_list_append(_url_con_list, url_con); > > @@ -1241,7 +1294,14 @@ _ecore_con_url_perform(Ecore_Con_Url *url_con) > FD_ZERO(&exc_set); > > /* Stupid curl, why can't I get the fd to the current added job? */ > - curl_multi_fdset(_curlm, &read_set, &write_set, &exc_set, &fd_max); > + ret = curl_multi_fdset(_curlm, &read_set, &write_set, &exc_set, > + &fd_max); > + if (ret != CURLM_OK) > + { > + ERR("curl_multi_fdset failed: %s", curl_multi_strerror(ret)); > + return EINA_FALSE; > + } > + > for (fd = 0; fd <= fd_max; fd++) > { > if (!FD_ISSET(fd, &_current_fd_set)) > @@ -1260,7 +1320,11 @@ _ecore_con_url_perform(Ecore_Con_Url *url_con) > { > long ms = 0; > > - curl_multi_timeout(_curlm, &ms); > + ret = curl_multi_timeout(_curlm, &ms); > + if (ret != CURLM_OK) > + ERR("curl_multi_timeout failed: %s", > + curl_multi_strerror(ret)); > + > if (ms == 0) > ms = 1000; > > @@ -1279,7 +1343,12 @@ _ecore_con_url_perform(Ecore_Con_Url *url_con) > { > /* Failed to set up an fd_handler */ > ecore_timer_freeze(_curl_timeout); > - curl_multi_remove_handle(_curlm, url_con->curl_easy); > + > + ret = curl_multi_remove_handle(_curlm, url_con->curl_easy); > + if (ret != CURLM_OK) > + ERR("curl_multi_remove_handle failed: %s", > + curl_multi_strerror(ret)); > + > url_con->active = EINA_FALSE; > url_con->fd = -1; > return EINA_FALSE; > @@ -1343,6 +1412,7 @@ _ecore_con_url_process_completed_jobs(Ecore_Con_Url > *url_con_to_match) Ecore_Con_Url *url_con; > Ecore_Con_Event_Url_Complete *e; > CURLMsg *curlmsg; > + CURLMcode ret; > int n_remaining; > int job_matched = 0; > > @@ -1393,7 +1463,11 @@ _ecore_con_url_process_completed_jobs(Ecore_Con_Url > *url_con_to_match) _url_complete_push_event(ECORE_CON_EVENT_URL_COMPLETE, e); > } > > - curl_multi_remove_handle(_curlm, url_con->curl_easy); > + ret = curl_multi_remove_handle(_curlm, url_con->curl_easy); > + if (ret != CURLM_OK) > + ERR("curl_multi_remove_handle failed: %s", > + curl_multi_strerror(ret)); > + > break; > } > } > -- > 1.7.3.1 > > > ------------------------------------------------------------------------------ > Beautiful is writing same markup. Internet Explorer 9 supports > standards for HTML5, CSS3, SVG 1.1, ECMAScript5, and DOM L2 & L3. > Spend less time writing and rewriting code and more time creating great > experiences on the web. Be a part of the beta today. > http://p.sf.net/sfu/beautyoftheweb > _______________________________________________ > enlightenment-devel mailing list > enlightenment-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel > -- ------------- Codito, ergo sum - "I code, therefore I am" -------------- The Rasterman (Carsten Haitzler) ras...@rasterman.com ------------------------------------------------------------------------------ Download new Adobe(R) Flash(R) Builder(TM) 4 The new Adobe(R) Flex(R) 4 and Flash(R) Builder(TM) 4 (formerly Flex(R) Builder(TM)) enable the development of rich applications that run across multiple browsers and platforms. Download your free trials today! http://p.sf.net/sfu/adobe-dev2dev _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel