mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-15 16:26:08 +03:00
40 lines
1.1 KiB
Zig
40 lines
1.1 KiB
Zig
const std = @import("std");
|
|
|
|
// base64.cpp
|
|
extern "c" fn ghostty_simd_base64_max_length(
|
|
input: [*]const u8,
|
|
len: usize,
|
|
) usize;
|
|
extern "c" fn ghostty_simd_base64_decode(
|
|
input: [*]const u8,
|
|
len: usize,
|
|
output: [*]u8,
|
|
) isize;
|
|
|
|
pub fn maxLen(input: []const u8) usize {
|
|
return ghostty_simd_base64_max_length(input.ptr, input.len);
|
|
}
|
|
|
|
pub fn decode(input: []const u8, output: []u8) error{Base64Invalid}![]const u8 {
|
|
const res = ghostty_simd_base64_decode(input.ptr, input.len, output.ptr);
|
|
if (res < 0) return error.Base64Invalid;
|
|
return output[0..@intCast(res)];
|
|
}
|
|
|
|
test "base64 maxLen" {
|
|
const testing = std.testing;
|
|
const len = maxLen("aGVsbG8gd29ybGQ=");
|
|
try testing.expectEqual(11, len);
|
|
}
|
|
|
|
test "base64 decode" {
|
|
const testing = std.testing;
|
|
const alloc = testing.allocator;
|
|
const input = "aGVsbG8gd29ybGQ=";
|
|
const len = maxLen(input);
|
|
const output = try alloc.alloc(u8, len);
|
|
defer alloc.free(output);
|
|
const str = try decode(input, output);
|
|
try testing.expectEqualStrings("hello world", str);
|
|
}
|