input/InputStream: migrate from class Error to C++ exceptions
This commit is contained in:
@@ -36,6 +36,7 @@
|
||||
#include "util/Error.hxx"
|
||||
#include "util/ScopeExit.hxx"
|
||||
|
||||
#include <stdexcept>
|
||||
#include <iostream>
|
||||
using std::cout;
|
||||
using std::cerr;
|
||||
@@ -46,7 +47,7 @@ using std::endl;
|
||||
#ifdef ENABLE_UPNP
|
||||
#include "input/InputStream.hxx"
|
||||
size_t
|
||||
InputStream::LockRead(void *, size_t, Error &)
|
||||
InputStream::LockRead(void *, size_t)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
@@ -21,9 +21,10 @@
|
||||
#include "FakeDecoderAPI.hxx"
|
||||
#include "decoder/DecoderAPI.hxx"
|
||||
#include "input/InputStream.hxx"
|
||||
#include "util/Error.hxx"
|
||||
#include "Compiler.h"
|
||||
|
||||
#include <stdexcept>
|
||||
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
|
||||
@@ -84,7 +85,11 @@ decoder_read(gcc_unused Decoder *decoder,
|
||||
InputStream &is,
|
||||
void *buffer, size_t length)
|
||||
{
|
||||
return is.LockRead(buffer, length, IgnoreError());
|
||||
try {
|
||||
return is.LockRead(buffer, length);
|
||||
} catch (const std::runtime_error &) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
|
@@ -23,7 +23,6 @@
|
||||
#include "input/InputStream.hxx"
|
||||
#include "input/TextInputStream.hxx"
|
||||
#include "config/ConfigGlobal.hxx"
|
||||
#include "util/Error.hxx"
|
||||
#include "thread/Cond.hxx"
|
||||
#include "Log.hxx"
|
||||
|
||||
@@ -55,12 +54,7 @@ dump_input_stream(InputStreamPtr &&is)
|
||||
|
||||
const ScopeLock protect(is->mutex);
|
||||
|
||||
Error error;
|
||||
if (!is->Check(error)) {
|
||||
LogError(error);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
is->Check();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@@ -24,7 +24,6 @@
|
||||
#include "input/InputStream.hxx"
|
||||
#include "input/Init.hxx"
|
||||
#include "ScopeIOThread.hxx"
|
||||
#include "util/Error.hxx"
|
||||
#include "thread/Cond.hxx"
|
||||
#include "Log.hxx"
|
||||
#include "fs/io/BufferedOutputStream.hxx"
|
||||
@@ -68,26 +67,17 @@ dump_input_stream(InputStream *is)
|
||||
delete tag;
|
||||
}
|
||||
|
||||
Error error;
|
||||
char buffer[4096];
|
||||
size_t num_read = is->Read(buffer, sizeof(buffer), error);
|
||||
if (num_read == 0) {
|
||||
if (error.IsDefined())
|
||||
LogError(error);
|
||||
|
||||
size_t num_read = is->Read(buffer, sizeof(buffer));
|
||||
if (num_read == 0)
|
||||
break;
|
||||
}
|
||||
|
||||
ssize_t num_written = write(1, buffer, num_read);
|
||||
if (num_written <= 0)
|
||||
break;
|
||||
}
|
||||
|
||||
Error error;
|
||||
if (!is->Check(error)) {
|
||||
LogError(error);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
is->Check();
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -109,7 +99,6 @@ try {
|
||||
archive_plugin_init_all();
|
||||
#endif
|
||||
|
||||
Error error;
|
||||
input_stream_global_init();
|
||||
|
||||
/* open the stream and dump it */
|
||||
|
@@ -37,8 +37,7 @@ public:
|
||||
return remaining == 0;
|
||||
}
|
||||
|
||||
size_t Read(void *ptr, size_t read_size,
|
||||
gcc_unused Error &error) override {
|
||||
size_t Read(void *ptr, size_t read_size) override {
|
||||
size_t nbytes = std::min(remaining, read_size);
|
||||
memcpy(ptr, data, nbytes);
|
||||
data += nbytes;
|
||||
@@ -76,50 +75,50 @@ public:
|
||||
|
||||
Error error;
|
||||
char buffer[16];
|
||||
size_t nbytes = ris->Read(buffer, 2, error);
|
||||
size_t nbytes = ris->Read(buffer, 2);
|
||||
CPPUNIT_ASSERT_EQUAL(size_t(2), nbytes);
|
||||
CPPUNIT_ASSERT_EQUAL('f', buffer[0]);
|
||||
CPPUNIT_ASSERT_EQUAL('o', buffer[1]);
|
||||
CPPUNIT_ASSERT_EQUAL(offset_type(2), ris->GetOffset());
|
||||
CPPUNIT_ASSERT(!ris->IsEOF());
|
||||
|
||||
nbytes = ris->Read(buffer, 2, error);
|
||||
nbytes = ris->Read(buffer, 2);
|
||||
CPPUNIT_ASSERT_EQUAL(size_t(2), nbytes);
|
||||
CPPUNIT_ASSERT_EQUAL('o', buffer[0]);
|
||||
CPPUNIT_ASSERT_EQUAL(' ', buffer[1]);
|
||||
CPPUNIT_ASSERT_EQUAL(offset_type(4), ris->GetOffset());
|
||||
CPPUNIT_ASSERT(!ris->IsEOF());
|
||||
|
||||
CPPUNIT_ASSERT(ris->Seek(1, error));
|
||||
ris->Seek(1);
|
||||
CPPUNIT_ASSERT_EQUAL(offset_type(1), ris->GetOffset());
|
||||
CPPUNIT_ASSERT(!ris->IsEOF());
|
||||
|
||||
nbytes = ris->Read(buffer, 2, error);
|
||||
nbytes = ris->Read(buffer, 2);
|
||||
CPPUNIT_ASSERT_EQUAL(size_t(2), nbytes);
|
||||
CPPUNIT_ASSERT_EQUAL('o', buffer[0]);
|
||||
CPPUNIT_ASSERT_EQUAL('o', buffer[1]);
|
||||
CPPUNIT_ASSERT_EQUAL(offset_type(3), ris->GetOffset());
|
||||
CPPUNIT_ASSERT(!ris->IsEOF());
|
||||
|
||||
CPPUNIT_ASSERT(ris->Seek(0, error));
|
||||
ris->Seek(0);
|
||||
CPPUNIT_ASSERT_EQUAL(offset_type(0), ris->GetOffset());
|
||||
CPPUNIT_ASSERT(!ris->IsEOF());
|
||||
|
||||
nbytes = ris->Read(buffer, 2, error);
|
||||
nbytes = ris->Read(buffer, 2);
|
||||
CPPUNIT_ASSERT_EQUAL(size_t(2), nbytes);
|
||||
CPPUNIT_ASSERT_EQUAL('f', buffer[0]);
|
||||
CPPUNIT_ASSERT_EQUAL('o', buffer[1]);
|
||||
CPPUNIT_ASSERT_EQUAL(offset_type(2), ris->GetOffset());
|
||||
CPPUNIT_ASSERT(!ris->IsEOF());
|
||||
|
||||
nbytes = ris->Read(buffer, sizeof(buffer), error);
|
||||
nbytes = ris->Read(buffer, sizeof(buffer));
|
||||
CPPUNIT_ASSERT_EQUAL(size_t(2), nbytes);
|
||||
CPPUNIT_ASSERT_EQUAL('o', buffer[0]);
|
||||
CPPUNIT_ASSERT_EQUAL(' ', buffer[1]);
|
||||
CPPUNIT_ASSERT_EQUAL(offset_type(4), ris->GetOffset());
|
||||
CPPUNIT_ASSERT(!ris->IsEOF());
|
||||
|
||||
nbytes = ris->Read(buffer, sizeof(buffer), error);
|
||||
nbytes = ris->Read(buffer, sizeof(buffer));
|
||||
CPPUNIT_ASSERT_EQUAL(size_t(3), nbytes);
|
||||
CPPUNIT_ASSERT_EQUAL('b', buffer[0]);
|
||||
CPPUNIT_ASSERT_EQUAL('a', buffer[1]);
|
||||
@@ -127,11 +126,11 @@ public:
|
||||
CPPUNIT_ASSERT_EQUAL(offset_type(7), ris->GetOffset());
|
||||
CPPUNIT_ASSERT(ris->IsEOF());
|
||||
|
||||
CPPUNIT_ASSERT(ris->Seek(3, error));
|
||||
ris->Seek(3);
|
||||
CPPUNIT_ASSERT_EQUAL(offset_type(3), ris->GetOffset());
|
||||
CPPUNIT_ASSERT(!ris->IsEOF());
|
||||
|
||||
nbytes = ris->Read(buffer, sizeof(buffer), error);
|
||||
nbytes = ris->Read(buffer, sizeof(buffer));
|
||||
CPPUNIT_ASSERT_EQUAL(size_t(4), nbytes);
|
||||
CPPUNIT_ASSERT_EQUAL(' ', buffer[0]);
|
||||
CPPUNIT_ASSERT_EQUAL('b', buffer[1]);
|
||||
|
Reference in New Issue
Block a user