diff options
author | Sam Atkins <atkinssj@serenityos.org> | 2022-01-20 17:01:39 +0000 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2022-01-24 22:36:09 +0100 |
commit | f590cd1850027399ab7f0193ba97fa76b3a9cbab (patch) | |
tree | c081315ec020ff956bd8cc62ab2549def75bcc9e /AK/Hex.cpp | |
parent | 45cf40653a03dab11c0739783446ff696a9a5b0a (diff) | |
download | serenity-f590cd1850027399ab7f0193ba97fa76b3a9cbab.zip |
AK+Userland: Make AK::decode_hex() return ErrorOr
This lets us propagate the reason why it failed up to the caller. :^)
Diffstat (limited to 'AK/Hex.cpp')
-rw-r--r-- | AK/Hex.cpp | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/AK/Hex.cpp b/AK/Hex.cpp index dca499f0d8..ca35477968 100644 --- a/AK/Hex.cpp +++ b/AK/Hex.cpp @@ -1,44 +1,38 @@ /* * Copyright (c) 2020, Andreas Kling <kling@serenityos.org> + * Copyright (c) 2022, Sam Atkins <atkinssj@serenityos.org> * * SPDX-License-Identifier: BSD-2-Clause */ #include <AK/Array.h> -#include <AK/ByteBuffer.h> #include <AK/Hex.h> -#include <AK/String.h> #include <AK/StringBuilder.h> -#include <AK/StringView.h> #include <AK/Types.h> #include <AK/Vector.h> namespace AK { -Optional<ByteBuffer> decode_hex(StringView input) +ErrorOr<ByteBuffer> decode_hex(StringView input) { if ((input.length() % 2) != 0) - return {}; + return Error::from_string_literal("Hex string was not an even length"); - auto output_result = ByteBuffer::create_zeroed(input.length() / 2); - if (output_result.is_error()) - return {}; - - auto& output = output_result.value(); + auto output = TRY(ByteBuffer::create_zeroed(input.length() / 2)); for (size_t i = 0; i < input.length() / 2; ++i) { const auto c1 = decode_hex_digit(input[i * 2]); if (c1 >= 16) - return {}; + return Error::from_string_literal("Hex string contains invalid digit"); const auto c2 = decode_hex_digit(input[i * 2 + 1]); if (c2 >= 16) - return {}; + return Error::from_string_literal("Hex string contains invalid digit"); output[i] = (c1 << 4) + c2; } - return output_result.release_value(); + return { move(output) }; } String encode_hex(const ReadonlyBytes input) |