storage: migrate from class Error to C++ exceptions

This commit is contained in:
Max Kellermann
2016-10-27 08:40:40 +02:00
parent cab87e9398
commit c598686bd9
19 changed files with 208 additions and 281 deletions

View File

@@ -58,9 +58,8 @@ skip_path(const char *name_utf8)
#pragma GCC diagnostic ignored "-Wformat-extra-args"
#endif
static bool
handle_listfiles_storage(Response &r, StorageDirectoryReader &reader,
Error &error)
static void
handle_listfiles_storage(Response &r, StorageDirectoryReader &reader)
{
const char *name_utf8;
while ((name_utf8 = reader.Read()) != nullptr) {
@@ -68,8 +67,11 @@ handle_listfiles_storage(Response &r, StorageDirectoryReader &reader,
continue;
StorageFileInfo info;
if (!reader.GetInfo(false, info, error))
try {
info = reader.GetInfo(false);
} catch (const std::runtime_error &) {
continue;
}
switch (info.type) {
case StorageFileInfo::Type::OTHER:
@@ -91,53 +93,30 @@ handle_listfiles_storage(Response &r, StorageDirectoryReader &reader,
if (info.mtime != 0)
time_print(r, "Last-Modified", info.mtime);
}
return true;
}
#if defined(WIN32) && GCC_CHECK_VERSION(4,6)
#pragma GCC diagnostic pop
#endif
static bool
handle_listfiles_storage(Response &r, Storage &storage, const char *uri,
Error &error)
{
std::unique_ptr<StorageDirectoryReader> reader(storage.OpenDirectory(uri, error));
if (reader == nullptr)
return false;
return handle_listfiles_storage(r, *reader, error);
}
CommandResult
handle_listfiles_storage(Response &r, Storage &storage, const char *uri)
{
Error error;
if (!handle_listfiles_storage(r, storage, uri, error))
return print_error(r, error);
std::unique_ptr<StorageDirectoryReader> reader(storage.OpenDirectory(uri));
handle_listfiles_storage(r, *reader);
return CommandResult::OK;
}
CommandResult
handle_listfiles_storage(Response &r, const char *uri)
{
Error error;
std::unique_ptr<Storage> storage(CreateStorageURI(io_thread_get(), uri,
error));
std::unique_ptr<Storage> storage(CreateStorageURI(io_thread_get(), uri));
if (storage == nullptr) {
if (error.IsDefined())
return print_error(r, error);
r.Error(ACK_ERROR_ARG, "Unrecognized storage URI");
return CommandResult::ERROR;
}
if (!handle_listfiles_storage(r, *storage, "", error))
return print_error(r, error);
return CommandResult::OK;
return handle_listfiles_storage(r, *storage, "");
}
static void
@@ -217,13 +196,8 @@ handle_mount(Client &client, Request args, Response &r)
return CommandResult::ERROR;
}
Error error;
Storage *storage = CreateStorageURI(io_thread_get(), remote_uri,
error);
Storage *storage = CreateStorageURI(io_thread_get(), remote_uri);
if (storage == nullptr) {
if (error.IsDefined())
return print_error(r, error);
r.Error(ACK_ERROR_ARG, "Unrecognized storage URI");
return CommandResult::ERROR;
}
@@ -237,6 +211,7 @@ handle_mount(Client &client, Request args, Response &r)
SimpleDatabase &db = *(SimpleDatabase *)_db;
try {
Error error;
if (!db.Mount(local_uri, remote_uri, error)) {
composite.Unmount(local_uri);
return print_error(r, error);