cs_parse_host free's connect_host on failure
[yaz-moved-to-github.git] / src / comstack.c
index 0c502f8..fdcfcdb 100644 (file)
@@ -87,9 +87,9 @@ void cs_get_host_args(const char *type_and_host, const char **args)
     }
 }
 
-static int cs_parse_host(const char *uri, const char **host,
-                         CS_TYPE *t, enum oid_proto *proto,
-                         char **connect_host)
+int cs_parse_host(const char *uri, const char **host,
+                  CS_TYPE *t, enum oid_proto *proto,
+                  char **connect_host)
 {
     *connect_host = 0;
 
@@ -124,6 +124,8 @@ static int cs_parse_host(const char *uri, const char **host,
             uri = cp + 1;
         }
 #ifdef WIN32
+        xfree(*connect_host);
+        *connect_host = 0;
         return 0;
 #else
         *t = unix_type;
@@ -142,6 +144,8 @@ static int cs_parse_host(const char *uri, const char **host,
         *host = uri + 4;
         *proto = PROTO_Z3950;
 #else
+        xfree(*connect_host);
+        *connect_host = 0;
         return 0;
 #endif
     }
@@ -161,6 +165,8 @@ static int cs_parse_host(const char *uri, const char **host,
             (*host)++;
         *proto = PROTO_HTTP;
 #else
+        xfree(*connect_host);
+        *connect_host = 0;
         return 0;
 #endif
     }
@@ -187,10 +193,7 @@ COMSTACK cs_create_host_proxy(const char *vhost, int blocking, void **vp,
     char *connect_host = 0;
 
     if (!cs_parse_host(vhost, &host, &t, &proto, &connect_host))
-    {
-        xfree(connect_host);
         return 0;
-    }
 
     if (proxy_host)
     {
@@ -198,10 +201,7 @@ COMSTACK cs_create_host_proxy(const char *vhost, int blocking, void **vp,
 
         xfree(connect_host);
         if (!cs_parse_host(proxy_host, &host, &t, &proto1, &connect_host))
-        {
-            xfree(connect_host);
             return 0;
-        }
     }
 
     if (t == tcpip_type)