mirror of
https://github.com/SerenityOS/serenity
synced 2024-11-02 22:04:47 +00:00
a8391d5a60
These instances were detected by searching for files that include Array.h, but don't match the regex: \\b(Array(?!\.h>)|iota_array|integer_sequence_generate_array)\\b These are the three symbols defined by Array.h. In theory, one might use LibCPP to detect things like this automatically, but let's do this one step after another.
59 lines
1.4 KiB
C++
59 lines
1.4 KiB
C++
/*
|
|
* Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
|
|
* Copyright (c) 2022, Sam Atkins <atkinssj@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#include <AK/Hex.h>
|
|
#include <AK/StringBuilder.h>
|
|
#include <AK/Types.h>
|
|
#include <AK/Vector.h>
|
|
|
|
namespace AK {
|
|
|
|
ErrorOr<ByteBuffer> decode_hex(StringView input)
|
|
{
|
|
if ((input.length() % 2) != 0)
|
|
return Error::from_string_literal("Hex string was not an even length");
|
|
|
|
auto output = TRY(ByteBuffer::create_zeroed(input.length() / 2));
|
|
|
|
for (size_t i = 0; i < input.length() / 2; ++i) {
|
|
auto const c1 = decode_hex_digit(input[i * 2]);
|
|
if (c1 >= 16)
|
|
return Error::from_string_literal("Hex string contains invalid digit");
|
|
|
|
auto const c2 = decode_hex_digit(input[i * 2 + 1]);
|
|
if (c2 >= 16)
|
|
return Error::from_string_literal("Hex string contains invalid digit");
|
|
|
|
output[i] = (c1 << 4) + c2;
|
|
}
|
|
|
|
return { move(output) };
|
|
}
|
|
|
|
#ifdef KERNEL
|
|
ErrorOr<NonnullOwnPtr<Kernel::KString>> encode_hex(const ReadonlyBytes input)
|
|
{
|
|
StringBuilder output(input.size() * 2);
|
|
|
|
for (auto ch : input)
|
|
TRY(output.try_appendff("{:02x}", ch));
|
|
|
|
return Kernel::KString::try_create(output.string_view());
|
|
}
|
|
#else
|
|
DeprecatedString encode_hex(const ReadonlyBytes input)
|
|
{
|
|
StringBuilder output(input.size() * 2);
|
|
|
|
for (auto ch : input)
|
|
output.appendff("{:02x}", ch);
|
|
|
|
return output.build();
|
|
}
|
|
#endif
|
|
|
|
}
|