lib/expat: use C++ exceptions instead of class Error

This commit is contained in:
Max Kellermann
2016-02-06 08:45:19 +01:00
parent cd2f65aafc
commit 6c5bc9b4a3
11 changed files with 108 additions and 174 deletions

View File

@@ -36,16 +36,11 @@ ExpatParser::SetError(Error &error)
XML_ErrorString(code));
}
bool
ExpatParser::Parse(const char *data, size_t length, bool is_final,
Error &error)
void
ExpatParser::Parse(const char *data, size_t length, bool is_final)
{
bool success = XML_Parse(parser, data, length,
is_final) == XML_STATUS_OK;
if (!success)
SetError(error);
return success;
if (XML_Parse(parser, data, length, is_final) != XML_STATUS_OK)
throw ExpatError(parser);
}
bool
@@ -59,14 +54,14 @@ ExpatParser::Parse(InputStream &is, Error &error)
if (nbytes == 0)
break;
if (!Parse(buffer, nbytes, false, error))
return false;
Parse(buffer, nbytes, false);
}
if (error.IsDefined())
return false;
return Parse("", 0, true, error);
Parse("", 0, true);
return true;
}
const char *

View File

@@ -25,9 +25,20 @@
#include <expat.h>
#include <stdexcept>
class InputStream;
class Error;
class ExpatError final : public std::runtime_error {
public:
ExpatError(XML_Error code)
:std::runtime_error(XML_ErrorString(code)) {}
ExpatError(XML_Parser parser)
:ExpatError(XML_GetErrorCode(parser)) {}
};
class ExpatParser final {
const XML_Parser parser;
@@ -53,8 +64,7 @@ public:
XML_SetCharacterDataHandler(parser, charhndl);
}
bool Parse(const char *data, size_t length, bool is_final,
Error &error);
void Parse(const char *data, size_t length, bool is_final);
bool Parse(InputStream &is, Error &error);
@@ -83,9 +93,8 @@ public:
parser.SetCharacterDataHandler(CharacterData);
}
bool Parse(const char *data, size_t length, bool is_final,
Error &error) {
return parser.Parse(data, length, is_final, error);
void Parse(const char *data, size_t length, bool is_final) {
parser.Parse(data, length, is_final);
}
bool Parse(InputStream &is, Error &error) {