input/InputStream: migrate from class Error to C++ exceptions
This commit is contained in:
@@ -43,25 +43,21 @@ ExpatParser::Parse(const char *data, size_t length, bool is_final)
|
||||
throw ExpatError(parser);
|
||||
}
|
||||
|
||||
bool
|
||||
ExpatParser::Parse(InputStream &is, Error &error)
|
||||
void
|
||||
ExpatParser::Parse(InputStream &is)
|
||||
{
|
||||
assert(is.IsReady());
|
||||
|
||||
while (true) {
|
||||
char buffer[4096];
|
||||
size_t nbytes = is.LockRead(buffer, sizeof(buffer), error);
|
||||
size_t nbytes = is.LockRead(buffer, sizeof(buffer));
|
||||
if (nbytes == 0)
|
||||
break;
|
||||
|
||||
Parse(buffer, nbytes, false);
|
||||
}
|
||||
|
||||
if (error.IsDefined())
|
||||
return false;
|
||||
|
||||
Parse("", 0, true);
|
||||
return true;
|
||||
}
|
||||
|
||||
const char *
|
||||
|
@@ -66,7 +66,7 @@ public:
|
||||
|
||||
void Parse(const char *data, size_t length, bool is_final);
|
||||
|
||||
bool Parse(InputStream &is, Error &error);
|
||||
void Parse(InputStream &is);
|
||||
|
||||
gcc_pure
|
||||
static const char *GetAttribute(const XML_Char **atts,
|
||||
@@ -97,8 +97,8 @@ public:
|
||||
parser.Parse(data, length, is_final);
|
||||
}
|
||||
|
||||
bool Parse(InputStream &is, Error &error) {
|
||||
return parser.Parse(is, error);
|
||||
void Parse(InputStream &is) {
|
||||
parser.Parse(is);
|
||||
}
|
||||
|
||||
gcc_pure
|
||||
|
@@ -21,6 +21,7 @@
|
||||
#include "Error.hxx"
|
||||
#include "Domain.hxx"
|
||||
#include "util/Error.hxx"
|
||||
#include "util/RuntimeError.hxx"
|
||||
|
||||
extern "C" {
|
||||
#include <libavutil/error.h>
|
||||
@@ -34,6 +35,14 @@ MakeFfmpegError(int errnum)
|
||||
return std::runtime_error(msg);
|
||||
}
|
||||
|
||||
std::runtime_error
|
||||
MakeFfmpegError(int errnum, const char *prefix)
|
||||
{
|
||||
char msg[256];
|
||||
av_strerror(errnum, msg, sizeof(msg));
|
||||
return FormatRuntimeError("%s: %s", prefix, msg);
|
||||
}
|
||||
|
||||
void
|
||||
SetFfmpegError(Error &error, int errnum)
|
||||
{
|
||||
|
@@ -27,6 +27,9 @@ class Error;
|
||||
std::runtime_error
|
||||
MakeFfmpegError(int errnum);
|
||||
|
||||
std::runtime_error
|
||||
MakeFfmpegError(int errnum, const char *prefix);
|
||||
|
||||
void
|
||||
SetFfmpegError(Error &error, int errnum);
|
||||
|
||||
|
@@ -21,7 +21,8 @@
|
||||
#include "OggFind.hxx"
|
||||
#include "lib/xiph/OggSyncState.hxx"
|
||||
#include "input/InputStream.hxx"
|
||||
#include "util/Error.hxx"
|
||||
|
||||
#include <stdexcept>
|
||||
|
||||
bool
|
||||
OggFindEOS(OggSyncState &oy, ogg_stream_state &os, ogg_packet &packet)
|
||||
@@ -48,8 +49,13 @@ OggSeekPageAtOffset(OggSyncState &oy, ogg_stream_state &os, InputStream &is,
|
||||
data */
|
||||
ogg_stream_reset(&os);
|
||||
|
||||
return is.LockSeek(offset, IgnoreError()) &&
|
||||
oy.ExpectPageSeekIn(os);
|
||||
try {
|
||||
is.LockSeek(offset);
|
||||
} catch (const std::runtime_error &) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return oy.ExpectPageSeekIn(os);
|
||||
}
|
||||
|
||||
bool
|
||||
|
Reference in New Issue
Block a user