diff options
author | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2022-06-29 18:21:58 +0200 |
---|---|---|
committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2022-07-08 19:17:35 +0200 |
commit | e6a19ba1a05f77f051187a6b1a828ee6d39ce052 (patch) | |
tree | c8a1566b10883edbe4a8bc9a724461f4003aaa10 /lib/tar/base64.c | |
parent | 359d71e90050a8b83f7bc7d2ecd4ff29c477cc22 (diff) |
Cleanup: split libtar header, move to sub directory
Some of the on-disk format internals are moved to a separate header
and some of the stuff from internal.h is moved to that format header.
C++ guards are added in addtion.
Everything PAX related is moved to pax_header.c, some internal
functions are marked as static.
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'lib/tar/base64.c')
-rw-r--r-- | lib/tar/base64.c | 59 |
1 files changed, 0 insertions, 59 deletions
diff --git a/lib/tar/base64.c b/lib/tar/base64.c deleted file mode 100644 index f88444a..0000000 --- a/lib/tar/base64.c +++ /dev/null @@ -1,59 +0,0 @@ -/* SPDX-License-Identifier: GPL-3.0-or-later */ -/* - * base64.c - * - * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> - */ -#include "config.h" - -#include "internal.h" - -static sqfs_u8 convert(char in) -{ - if (isupper(in)) - return in - 'A'; - if (islower(in)) - return in - 'a' + 26; - if (isdigit(in)) - return in - '0' + 52; - if (in == '+') - return 62; - if (in == '/' || in == '-') - return 63; - return 0; -} - -size_t base64_decode(sqfs_u8 *out, const char *in, size_t len) -{ - sqfs_u8 *start = out; - - while (len > 0) { - unsigned int diff = 0, value = 0; - - while (diff < 4 && len > 0) { - if (*in == '=' || *in == '_' || *in == '\0') { - len = 0; - } else { - value = (value << 6) | convert(*(in++)); - --len; - ++diff; - } - } - - if (diff < 2) - break; - - value <<= 6 * (4 - diff); - - switch (diff) { - case 4: out[2] = value & 0xff; /* fall-through */ - case 3: out[1] = (value >> 8) & 0xff; /* fall-through */ - default: out[0] = (value >> 16) & 0xff; - } - - out += (diff * 3) / 4; - } - - *out = '\0'; - return out - start; -} |