X-Git-Url: http://sru.miketaylor.org.uk/?a=blobdiff_plain;f=src%2Futil.cpp;h=97b11257c02be5c75f3097bb613a6233aaee4e75;hb=fb8cc0b693613d65043352b90089c8938cd39703;hp=ea6c9310e23b886ac1cd43689326b1f26ac3d101;hpb=50597d2f7d3607e91c94601eb8eb495d73be3eae;p=metaproxy-moved-to-github.git diff --git a/src/util.cpp b/src/util.cpp index ea6c931..97b1125 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -20,6 +20,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include #include +#include #include #include #include @@ -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 &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: