Skip to content

Commit

Permalink
AK: Make encode_base64 take a ByteBuffer and return a String
Browse files Browse the repository at this point in the history
That makes the interface symmetric with decode_base64 and it's
what all current callers want (except for one, which is buggy).
  • Loading branch information
nico authored and awesomekling committed Jul 22, 2020
1 parent 9e32ad6 commit 5ba8aba
Show file tree
Hide file tree
Showing 5 changed files with 15 additions and 13 deletions.
14 changes: 8 additions & 6 deletions AK/Base64.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
*/

#include <AK/ByteBuffer.h>
#include <AK/String.h>
#include <AK/StringBuilder.h>
#include <AK/StringView.h>
#include <AK/Types.h>
#include <AK/Vector.h>
Expand Down Expand Up @@ -84,20 +86,20 @@ ByteBuffer decode_base64(const StringView& input)
return ByteBuffer::copy(output.data(), output.size());
}

ByteBuffer encode_base64(const StringView& input)
String encode_base64(const ByteBuffer& input)
{
Vector<u8> output;
StringBuilder output;

auto get = [&](size_t offset, bool* need_padding = nullptr) -> u8 {
if (offset >= input.length()) {
if (offset >= input.size()) {
if (need_padding)
*need_padding = true;
return 0;
}
return (u8)input[offset];
return input[offset];
};

for (size_t i = 0; i < input.length(); i += 3) {
for (size_t i = 0; i < input.size(); i += 3) {
bool is_8bit = false;
bool is_16bit = false;

Expand All @@ -121,7 +123,7 @@ ByteBuffer encode_base64(const StringView& input)
output.append(out3);
}

return ByteBuffer::copy(output.data(), output.size());
return output.to_string();
}

}
2 changes: 1 addition & 1 deletion AK/Base64.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ namespace AK {

ByteBuffer decode_base64(const StringView&);

ByteBuffer encode_base64(const StringView&);
String encode_base64(const ByteBuffer&);

}

Expand Down
4 changes: 2 additions & 2 deletions AK/Tests/TestBase64.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,8 @@ TEST_CASE(test_decode)
TEST_CASE(test_encode)
{
auto encode_equal = [&](const char* input, const char* expected) {
auto encoded = encode_base64(StringView(input));
EXPECT(String::copy(encoded) == String(expected));
auto encoded = encode_base64(ByteBuffer::wrap(input, strlen(input)));
EXPECT(encoded == String(expected));
};

encode_equal("", "");
Expand Down
4 changes: 2 additions & 2 deletions Libraries/LibWeb/Bindings/WindowObject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -267,8 +267,8 @@ JS_DEFINE_NATIVE_FUNCTION(WindowObject::btoa)
if (interpreter.exception())
return {};
// FIXME: This should convert string to a non-UTF-8 byte string first.
auto encoded = encode_base64(StringView(string));
return JS::js_string(interpreter, String::copy(encoded));
auto encoded = encode_base64(ByteBuffer::wrap(string.characters(), string.length()));
return JS::js_string(interpreter, move(encoded));
}

JS_DEFINE_NATIVE_GETTER(WindowObject::document_getter)
Expand Down
4 changes: 2 additions & 2 deletions Userland/base64.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,6 @@ int main(int argc, char** argv)
return 0;
}

auto encoded = encode_base64(StringView(buffer));
printf("%s\n", String::copy(encoded).characters());
auto encoded = encode_base64(buffer);
printf("%s\n", encoded.characters());
}

0 comments on commit 5ba8aba

Please sign in to comment.