added ostream for log, SAX parser improvements
authorjhurst <jhurst@cinecert.com>
Fri, 11 Jul 2008 06:30:14 +0000 (06:30 +0000)
committerjhurst <>
Fri, 11 Jul 2008 06:30:14 +0000 (06:30 +0000)
src/KM_log.cpp
src/KM_log.h
src/KM_xml.cpp

index 4778ffc36bcd85593ba25fbc71891ddf557c5520..aa0303b2bf7cf53277f52e9dc7ad6168d6c065dc 100755 (executable)
@@ -34,6 +34,8 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #include <sys/types.h>
 #include <string.h>
 #include <stdarg.h>
+#include <iostream>
+#include <sstream>
 
 #ifdef KM_WIN32
 #define getpid GetCurrentProcessId
@@ -144,6 +146,24 @@ Kumu::StreamLogSink::WriteEntry(const LogEntry& Entry)
 
 //------------------------------------------------------------------------------------------
 
+//
+std::basic_ostream<char, std::char_traits<char> >&
+Kumu::operator<<(std::basic_ostream<char, std::char_traits<char> >& strm, LogEntry const& Entry)
+{
+  std::basic_ostringstream<char, std::char_traits<char> > s;
+  s.copyfmt(strm);
+  s.width(0);
+  std::string buf;
+
+  s << Entry.CreateStringWithOptions(buf, LOG_OPTION_ALL);
+
+  strm << s.str();
+  return strm;
+}
+
+//------------------------------------------------------------------------------------------
+
+
 //
 bool
 Kumu::LogEntry::TestFilter(i32_t filter) const
index fb8d805f63c87db86a331f00495aa0dbe532d5f4..671c072af58fabc4fe172ee6bcdfb90104e503aa 100755 (executable)
@@ -38,6 +38,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #include <KM_util.h>
 #include <stdarg.h>
 #include <errno.h>
+#include <iosfwd>
 
 #define LOG_MSG_IMPL(t) \
   va_list args; \
@@ -135,6 +136,10 @@ namespace Kumu
     bool   Unarchive(MemIOReader* Reader);
   };
 
+  //
+  std::basic_ostream<char, std::char_traits<char> >&
+    operator<<(std::basic_ostream<char, std::char_traits<char> >& strm, LogEntry const& Entry);
+
 
   typedef ArchivableList<LogEntry> LogEntryList;
   
index b7b8c09add7a2687cdf9a841979fc313bea2d2df..4792e9beeed0aeb216d921faf06bdc1fa9622882 100644 (file)
@@ -683,6 +683,7 @@ Kumu::XMLElement::ParseString(const std::string& document)
 
   asdcp_init_xml_dom();
 
+  int errorCount = 0;
   SAXParser* parser = new SAXParser();
   parser->setDoValidation(true);
   parser->setDoNamespaces(true);    // optional
@@ -704,25 +705,28 @@ Kumu::XMLElement::ParseString(const std::string& document)
       char* message = XMLString::transcode(e.getMessage());
       DefaultLogSink().Error("Parser error: %s\n", message);
       XMLString::release(&message);
-      return false;
+      errorCount++;
     }
   catch (const SAXParseException& e)
     {
       char* message = XMLString::transcode(e.getMessage());
       DefaultLogSink().Error("Parser error: %s at line %d\n", message, e.getLineNumber());
       XMLString::release(&message);
-      return false;
+      errorCount++;
     }
   catch (...)
     {
       DefaultLogSink().Error("Unexpected XML parser error\n");
-      return false;
+      errorCount++;
     }
   
-  m_NamespaceOwner = (void*)docHandler->TakeNamespaceMap();
+  if ( errorCount == 0 )
+    m_NamespaceOwner = (void*)docHandler->TakeNamespaceMap();
+
   delete parser;
   delete docHandler;
-  return true;
+
+  return errorCount > 0 ? false : true;
 }
 
 //