Fix split_zurl bug (missing char after /).
[metaproxy-moved-to-github.git] / src / util.cpp
index ea6c931..97b1125 100644 (file)
@@ -20,6 +20,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #include <metaproxy/util.hpp>
 
 #include <yaz/odr.h>
+#include <yaz/comstack.h>
 #include <yaz/pquery.h>
 #include <yaz/otherinfo.h>
 #include <yaz/querytowrbuf.h>
@@ -262,22 +263,19 @@ std::string mp_util::zQueryToString(Z_Query *query)
 {
     std::string query_str = "";
 
-    if (query && query->which == Z_Query_type_1){
+    if (query && query->which == Z_Query_type_1)
+    {
         Z_RPNQuery *rpn = query->u.type_1;
         
-        if (rpn){
-            
-            // allocate wrbuf (strings in YAZ!)
-            WRBUF w = wrbuf_alloc();
+        if (rpn)
+        {
+            mp::wrbuf w;
             
             // put query in w
             yaz_rpnquery_to_wrbuf(w, rpn);
             
             // from w to std::string
-            query_str = std::string(wrbuf_buf(w), wrbuf_len(w));
-            
-            // destroy wrbuf
-            wrbuf_destroy(w);
+            query_str = std::string(w.buf(), w.len());
         }
     }
 
@@ -409,14 +407,15 @@ void mp_util::split_zurl(std::string zurl, std::string &host,
                          std::list<std::string> &db)
 {
     const char *zurl_cstr = zurl.c_str();
-    const char *sep = strchr(zurl_cstr, '/');
-    
-    if (sep)
-    {
-        host = std::string(zurl_cstr, sep - zurl_cstr);
+    const char *args = 0;
+    cs_get_host_args(zurl_cstr, &args);
 
-        const char *cp1 = sep+1;
-        while(1)
+    if (args && *args)
+    { 
+        host = std::string(zurl_cstr, args - zurl_cstr);
+
+        const char *cp1 = args;
+        while (1)
         {
             const char *cp2 = strchr(cp1, '+');
             if (cp2)
@@ -430,9 +429,7 @@ void mp_util::split_zurl(std::string zurl, std::string &host,
         }
     }
     else
-    {
         host = zurl;
-    }
 }
 
 bool mp_util::set_databases_from_zurl(
@@ -704,6 +701,31 @@ std::string mp_util::uri_decode(std::string s)
     return result;
 }
 
+mp::wrbuf::wrbuf()
+{
+    m_wrbuf = wrbuf_alloc();
+}
+
+mp::wrbuf::~wrbuf()
+{
+    wrbuf_destroy(m_wrbuf);
+}
+
+mp::wrbuf::operator WRBUF() const
+{
+    return m_wrbuf;
+}
+
+size_t mp::wrbuf::len()
+{
+    return wrbuf_len(m_wrbuf);
+}
+
+const char *mp::wrbuf::buf()
+{
+    return wrbuf_buf(m_wrbuf);
+}
+
 
 /*
  * Local variables: