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

Reply via email to