Switch to side-by-side view

--- a/src/qtgui/xmltosd.cpp
+++ b/src/qtgui/xmltosd.cpp
@@ -51,7 +51,7 @@
     }
 
     // The object we set up
-    STD_SHARED_PTR<SearchData> sd;
+    std::shared_ptr<SearchData> sd;
     bool isvalid;
 
 private:
@@ -82,13 +82,20 @@
 				const QString &qName,
 				const QXmlAttributes &attrs)
 {
-    LOGDEB2("SDHXMLHandler::startElement: name ["  << ((const char *)qName.toUtf8()) << "]\n" );
+    LOGDEB2("SDHXMLHandler::startElement: name ["  << qs2utf8s(qName) << "]\n");
     if (qName == "SD") {
         // Advanced search history entries have no type. So we're good
         // either if type is absent, or if it's searchdata
         int idx = attrs.index("type");
         if (idx >= 0 && attrs.value(idx).compare("searchdata")) {
-            LOGDEB("XMLTOSD: bad type\n" );
+            LOGDEB("XMLTOSD: bad type\n");
+	    return false;
+	}
+	resetTemps();
+	// A new search descriptor. Allocate data structure
+        sd = std::shared_ptr<SearchData>(new SearchData);
+	if (!sd) {
+	    LOGERR("SDHXMLHandler::startElement: out of memory\n");
 	    return false;
 	}
     }	
@@ -99,7 +106,7 @@
                                const QString & /* localName */,
                                const QString &qName)
 {
-    LOGDEB2("SDHXMLHandler::endElement: name ["  << ((const char *)qName.toUtf8()) << "]\n" );
+    LOGDEB2("SDHXMLHandler::endElement: name ["  << qs2utf8s(qName) << "]\n");
 
     if (qName == "CLT") {
 	if (currentText == "OR") {
@@ -138,7 +145,7 @@
 	    c = new SearchDataClauseDist(SCLT_NEAR, text, slack, field);
 	    c->setexclude(exclude);
 	} else {
-	    LOGERR("Bad clause type ["  << (qs2utf8s(whatclause)) << "]\n" );
+	    LOGERR("Bad clause type ["  << qs2utf8s(whatclause) << "]\n");
 	    return false;
 	}
 	sd->addClause(c);
@@ -199,7 +206,7 @@
 }
 
 
-STD_SHARED_PTR<Rcl::SearchData> xmlToSearchData(const string& xml)
+std::shared_ptr<Rcl::SearchData> xmlToSearchData(const string& xml)
 {
     SDHXMLHandler handler;
     QXmlSimpleReader reader;
@@ -210,8 +217,8 @@
     xmlInputSource.setData(QString::fromUtf8(xml.c_str()));
 
     if (!reader.parse(xmlInputSource) || !handler.isvalid) {
-        LOGERR("xmlToSearchData: parse failed for ["  << (xml) << "]\n" );
-        return STD_SHARED_PTR<SearchData>();
+        LOGERR("xmlToSearchData: parse failed for ["  << xml << "]\n");
+        return std::shared_ptr<SearchData>();
     }
     return handler.sd;
 }
@@ -260,12 +267,12 @@
                                  const QString &qName,
                                  const QXmlAttributes &attrs)
 {
-    LOGDEB2("SSHXMLHandler::startElement: name ["  << ((const char *)qName.toUtf8()) << "]\n" );
+    LOGDEB2("SSHXMLHandler::startElement: name ["  << u8s2qs(qName) << "]\n");
     if (qName == "SD") {
         // Simple search saved data has a type='ssearch' attribute.
         int idx = attrs.index("type");
         if (idx < 0 && attrs.value(idx).compare("ssearch")) {
-            LOGDEB("XMLTOSSS: bad type\n" );
+            LOGDEB("XMLTOSSS: bad type\n");
             return false;
         }
 	resetTemps();
@@ -277,7 +284,7 @@
                                const QString & /* localName */,
                                const QString &qName)
 {
-    LOGDEB2("SSHXMLHandler::endElement: name ["  << ((const char *)qName.toUtf8()) << "]\n" );
+    LOGDEB2("SSHXMLHandler::endElement: name ["  << u8s2qs(qName) << "]\n");
 
     currentText = currentText.trimmed();
 
@@ -297,7 +304,7 @@
         } else if (!currentText.compare("AND")) {
             data.mode = SSearch::SST_ALL;
         } else {
-            LOGERR("BAD SEARCH MODE: ["  << (qs2utf8s(currentText)) << "]\n" );
+            LOGERR("BAD SEARCH MODE: [" << qs2utf8s(currentText) << "]\n");
             return false;
         }
     } else if (qName == "AS") {
@@ -324,7 +331,7 @@
     xmlInputSource.setData(QString::fromUtf8(xml.c_str()));
 
     if (!reader.parse(xmlInputSource) || !handler.isvalid) {
-        LOGERR("xmlToSSearch: parse failed for ["  << (xml) << "]\n" );
+        LOGERR("xmlToSSearch: parse failed for ["  << xml << "]\n");
         return false;
     }
     data = handler.data;