lib/zlib/Error: derive from std::system_error
This commit is contained in:
parent
432bfa15f4
commit
a739eefb01
|
@ -1,12 +0,0 @@
|
|||
// SPDX-License-Identifier: BSD-2-Clause
|
||||
// author: Max Kellermann <max.kellermann@gmail.com>
|
||||
|
||||
#include "Error.hxx"
|
||||
|
||||
#include <zlib.h>
|
||||
|
||||
const char *
|
||||
ZlibError::what() const noexcept
|
||||
{
|
||||
return zError(code);
|
||||
}
|
|
@ -3,17 +3,25 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <exception>
|
||||
#include <zlib.h>
|
||||
|
||||
class ZlibError final : public std::exception {
|
||||
int code;
|
||||
#include <system_error>
|
||||
|
||||
class ZlibErrorCategory final : public std::error_category {
|
||||
public:
|
||||
explicit ZlibError(int _code) noexcept:code(_code) {}
|
||||
|
||||
int GetCode() const noexcept {
|
||||
return code;
|
||||
const char *name() const noexcept override {
|
||||
return "zlib";
|
||||
}
|
||||
|
||||
const char *what() const noexcept override;
|
||||
std::string message(int condition) const override {
|
||||
return zError(condition);
|
||||
}
|
||||
};
|
||||
|
||||
inline ZlibErrorCategory zlib_error_category;
|
||||
|
||||
inline std::system_error
|
||||
MakeZlibError(int code, const char *msg) noexcept
|
||||
{
|
||||
return std::system_error(code, zlib_error_category, msg);
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ GunzipReader::GunzipReader(Reader &_next)
|
|||
|
||||
int result = inflateInit2(&z, 16 + MAX_WBITS);
|
||||
if (result != Z_OK)
|
||||
throw ZlibError(result);
|
||||
throw MakeZlibError(result, "inflateInit2() failed");
|
||||
}
|
||||
|
||||
inline bool
|
||||
|
@ -60,7 +60,7 @@ GunzipReader::Read(std::span<std::byte> dest)
|
|||
eof = true;
|
||||
return dest.size() - z.avail_out;
|
||||
} else if (result != Z_OK)
|
||||
throw ZlibError(result);
|
||||
throw MakeZlibError(result, "inflate() failed");
|
||||
|
||||
buffer.Consume(r.size() - z.avail_in);
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ GzipOutputStream::GzipOutputStream(OutputStream &_next)
|
|||
windowBits | gzip_encoding,
|
||||
8, Z_DEFAULT_STRATEGY);
|
||||
if (result != Z_OK)
|
||||
throw ZlibError(result);
|
||||
throw MakeZlibError(result, "deflateInit2() failed");
|
||||
}
|
||||
|
||||
GzipOutputStream::~GzipOutputStream() noexcept
|
||||
|
@ -42,7 +42,7 @@ GzipOutputStream::SyncFlush()
|
|||
|
||||
int result = deflate(&z, Z_SYNC_FLUSH);
|
||||
if (result != Z_OK)
|
||||
throw ZlibError(result);
|
||||
throw MakeZlibError(result, "deflate() failed");
|
||||
|
||||
if (z.next_out == output)
|
||||
break;
|
||||
|
@ -70,7 +70,7 @@ GzipOutputStream::Finish()
|
|||
if (result == Z_STREAM_END)
|
||||
break;
|
||||
else if (result != Z_OK)
|
||||
throw ZlibError(result);
|
||||
throw MakeZlibError(result, "deflate() failed");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -90,7 +90,7 @@ GzipOutputStream::Write(std::span<const std::byte> src)
|
|||
|
||||
int result = deflate(&z, Z_NO_FLUSH);
|
||||
if (result != Z_OK)
|
||||
throw ZlibError(result);
|
||||
throw MakeZlibError(result, "deflate() failed");
|
||||
|
||||
if (z.next_out > output)
|
||||
next.Write(std::as_bytes(std::span{output}.first(z.next_out - output)));
|
||||
|
|
|
@ -6,7 +6,6 @@ endif
|
|||
|
||||
zlib = static_library(
|
||||
'zlib',
|
||||
'Error.cxx',
|
||||
'GunzipReader.cxx',
|
||||
'GzipOutputStream.cxx',
|
||||
'AutoGunzipReader.cxx',
|
||||
|
|
Loading…
Reference in New Issue