X-Git-Url: http://sru.miketaylor.org.uk/?a=blobdiff_plain;f=src%2Futil.cpp;h=3ab3033d2e5caefd413956dd6494c98fe5b35291;hb=6bd242f99846e3663a0551c6d18d6dedd7a94a38;hp=1f335a18a61ba3a65aebfb141a0ae580fd5a180d;hpb=3e584362b6933174b28cf98ff3138a589ed8326d;p=metaproxy-moved-to-github.git diff --git a/src/util.cpp b/src/util.cpp index 1f335a1..3ab3033 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -1,5 +1,5 @@ /* This file is part of Metaproxy. - Copyright (C) 2005-2011 Index Data + Copyright (C) 2005-2012 Index Data Metaproxy is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free @@ -262,22 +262,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()); } } @@ -690,9 +687,46 @@ std::string mp_util::uri_encode(std::string s) char *x = (char *) xmalloc(1 + s.length() * 3); yaz_encode_uri_component(x, s.c_str()); std::string result(x); + xfree(x); + return result; +} + + +std::string mp_util::uri_decode(std::string s) +{ + char *x = (char *) xmalloc(1 + s.length()); + yaz_decode_uri_component(x, s.c_str(), s.length()); + std::string result(x); + xfree(x); 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: * c-basic-offset: 4