input/InputStream: migrate from class Error to C++ exceptions

This commit is contained in:
Max Kellermann
2016-09-09 18:47:42 +02:00
parent 597e59f10d
commit 8c744efd56
64 changed files with 440 additions and 473 deletions

View File

@@ -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 *

View File

@@ -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

View File

@@ -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)
{

View File

@@ -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);

View File

@@ -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