aboutsummaryrefslogtreecommitdiffstats
path: root/src/base64.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2016-03-16 16:21:20 -0400
committerDavid Robillard <d@drobilla.net>2022-01-13 15:33:54 -0500
commit97258f0e85834d71b17e3c1997a5c7dc136e0b98 (patch)
treed0508236b48d292e59b9ae4404dc23cb258c2107 /src/base64.c
parentf078026b3c5d63c494381d3573a8107ddd7d78f7 (diff)
downloadserd-97258f0e85834d71b17e3c1997a5c7dc136e0b98.tar.gz
serd-97258f0e85834d71b17e3c1997a5c7dc136e0b98.tar.bz2
serd-97258f0e85834d71b17e3c1997a5c7dc136e0b98.zip
Use char* for strings in public API
The constant casting just makes user code a mess, for no benefit.
Diffstat (limited to 'src/base64.c')
-rw-r--r--src/base64.c20
1 files changed, 7 insertions, 13 deletions
diff --git a/src/base64.c b/src/base64.c
index 8569577b..0d79fd88 100644
--- a/src/base64.c
+++ b/src/base64.c
@@ -73,7 +73,6 @@ serd_base64_encode(uint8_t* const str,
const bool wrap_lines)
{
bool has_newline = false;
-
for (size_t i = 0, j = 0; i < size; i += 3, j += 4) {
uint8_t in[4] = {0, 0, 0, 0};
size_t n_in = MIN(3, size - i);
@@ -107,28 +106,23 @@ decode_chunk(const uint8_t in[4], uint8_t out[3])
}
void*
-serd_base64_decode(const uint8_t* const str,
- const size_t len,
- size_t* const size)
+serd_base64_decode(const char* const str, const size_t len, size_t* const size)
{
- void* buf = malloc((len * 3) / 4 + 2);
+ const uint8_t* const ustr = (const uint8_t*)str;
- *size = 0;
+ void* buf = malloc((len * 3) / 4 + 2);
+ *size = 0;
for (size_t i = 0, j = 0; i < len; j += 3) {
uint8_t in[] = "====";
size_t n_in = 0;
for (; i < len && n_in < 4; ++n_in) {
- for (; i < len && !is_base64(str[i]); ++i) {
- // Skip junk
- }
-
- in[n_in] = str[i++];
+ for (; i < len && !is_base64(ustr[i]); ++i) {
+ } // Skip junk
+ in[n_in] = ustr[i++];
}
-
if (n_in > 1) {
*size += decode_chunk(in, (uint8_t*)buf + j);
}
}
-
return buf;
}