share: don't use SSL unless enabled
authorDaniel Stenberg <daniel@haxx.se>
Mon, 3 Oct 2011 20:32:36 +0000 (22:32 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 3 Oct 2011 20:35:04 +0000 (22:35 +0200)
Don't even declare the struct members for disabled features

Introducing the CURLSHE_NOT_BUILT_IN return code for the share interface
when trying to set a sharing option that has been disabled (or not
enabled) in the library.

docs/libcurl/libcurl-errors.3
docs/libcurl/symbols-in-versions
include/curl/curl.h
lib/share.c
lib/share.h
lib/strerror.c

index beabf98..7954a83 100644 (file)
@@ -277,3 +277,6 @@ An invalid share object was passed to the function.
 .IP "CURLSHE_NOMEM (4)"
 Not enough memory was available.
 (Added in 7.12.0)
+.IP "CURLSHE_NOT_BUILT_IN (5)"
+The requsted sharing could not be done because the library you use don't have
+that particular feature enabled. (Added in 7.23.0)
index 028bb1a..8c1792c 100644 (file)
@@ -550,6 +550,7 @@ CURLSHE_BAD_OPTION              7.10.3
 CURLSHE_INVALID                 7.10.3
 CURLSHE_IN_USE                  7.10.3
 CURLSHE_NOMEM                   7.12.0
+CURLSHE_NOT_BUILT_IN            7.23.0
 CURLSHE_OK                      7.10.3
 CURLSHOPT_LOCKFUNC              7.10.3
 CURLSHOPT_NONE                  7.10.3
index 062f788..f4aa17f 100644 (file)
@@ -2014,8 +2014,9 @@ typedef enum {
   CURLSHE_BAD_OPTION, /* 1 */
   CURLSHE_IN_USE,     /* 2 */
   CURLSHE_INVALID,    /* 3 */
-  CURLSHE_NOMEM,      /* out of memory */
-  CURLSHE_LAST /* never use */
+  CURLSHE_NOMEM,      /* 4 out of memory */
+  CURLSHE_NOT_BUILT_IN, /* 5 feature not present in lib */
+  CURLSHE_LAST        /* never use */
 } CURLSHcode;
 
 typedef enum {
index a3eae16..6f8ba49 100644 (file)
@@ -73,17 +73,20 @@ curl_share_setopt(CURLSH *sh, CURLSHoption option, ...)
       }
       break;
 
-#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES)
     case CURL_LOCK_DATA_COOKIE:
+#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES)
       if(!share->cookies) {
         share->cookies = Curl_cookie_init(NULL, NULL, NULL, TRUE );
         if(!share->cookies)
           return CURLSHE_NOMEM;
       }
       break;
-#endif   /* CURL_DISABLE_HTTP */
+#else   /* CURL_DISABLE_HTTP */
+      return CURLSHE_NOT_BUILT_IN;
+#endif
 
     case CURL_LOCK_DATA_SSL_SESSION:
+#ifdef USE_SSL
       if(!share->sslsession) {
         share->nsslsession = 8;
         share->sslsession = calloc(share->nsslsession,
@@ -92,6 +95,9 @@ curl_share_setopt(CURLSH *sh, CURLSHoption option, ...)
           return CURLSHE_NOMEM;
       }
       break;
+#else
+      return CURLSHE_NOT_BUILT_IN;
+#endif
 
     case CURL_LOCK_DATA_CONNECT:     /* not supported (yet) */
 
@@ -112,22 +118,28 @@ curl_share_setopt(CURLSH *sh, CURLSHoption option, ...)
       }
       break;
 
-#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES)
     case CURL_LOCK_DATA_COOKIE:
+#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES)
       if(share->cookies) {
         Curl_cookie_cleanup(share->cookies);
         share->cookies = NULL;
       }
       break;
-#endif   /* CURL_DISABLE_HTTP */
+#else   /* CURL_DISABLE_HTTP */
+      return CURLSHE_NOT_BUILT_IN;
+#endif
 
     case CURL_LOCK_DATA_SSL_SESSION:
+#ifdef USE_SSL
       if(share->sslsession) {
         free(share->sslsession);
         share->sslsession = NULL;
         share->nsslsession = 0;
       }
       break;
+#else
+      return CURLSHE_NOT_BUILT_IN;
+#endif
 
     case CURL_LOCK_DATA_CONNECT:
       break;
@@ -186,11 +198,13 @@ curl_share_cleanup(CURLSH *sh)
   if(share->cookies)
     Curl_cookie_cleanup(share->cookies);
 
+#ifdef USE_SSL
   if(share->sslsession) {
     for(i = 0; i < share->nsslsession; ++i)
       Curl_ssl_kill_session(&(share->sslsession[i]));
     free(share->sslsession);
   }
+#endif
 
   if(share->unlockfunc)
     share->unlockfunc(NULL, CURL_LOCK_DATA_SHARE, share->clientdata);
index cf20000..cb5c6c7 100644 (file)
@@ -8,7 +8,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2005, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2011, 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
@@ -46,9 +46,13 @@ struct Curl_share {
   void *clientdata;
 
   struct curl_hash *hostcache;
+#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES)
   struct CookieInfo *cookies;
+#endif
 
+#ifdef USE_SSL
   struct curl_ssl_session *sslsession;
+#endif
   unsigned int nsslsession;
 };
 
index f038f8e..fcb617c 100644 (file)
@@ -384,6 +384,9 @@ curl_share_strerror(CURLSHcode error)
   case CURLSHE_NOMEM:
     return "Out of memory";
 
+  case CURLSHE_NOT_BUILT_IN:
+    return "Feature not enabled in this library";
+
   case CURLSHE_LAST:
     break;
   }