From b7199a77aca01f85a3359737cd4e6c73c29bd82a Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Fri, 21 Feb 2020 19:52:14 +0000 Subject: extend base64 api with url safe versions --- test/base64.c | 84 +++++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 56 insertions(+), 28 deletions(-) (limited to 'test/base64.c') diff --git a/test/base64.c b/test/base64.c index 7b09205..5cb8a7c 100644 --- a/test/base64.c +++ b/test/base64.c @@ -16,37 +16,65 @@ #include #include #include +#include #include int main(int argc, char**argv) { - uint8_t *buffer; - size_t buffer_len=0; - uint8_t *output; - size_t output_len; - - if (scanf("%1024mc%n", &buffer, (int *)&buffer_len) < 1) { - return 1; - } - - if (argc == 1) { - /* encode */ - nsu_base64_encode_alloc(buffer, buffer_len, &output, &output_len); - } else if ((argv[1][0] == '-') && (argv[1][1] == 'd')) { - /* decode */ - nsu_base64_decode_alloc(buffer, buffer_len, &output, &output_len); - } else { - fprintf(stderr, "Usage: %s [-d]\n", argv[0]); - return 1; - } - - if (output != NULL) { - printf("%.*s", (int)output_len, output); - free(output); - } - - free(buffer); - - return 0; + uint8_t *buffer; + size_t buffer_len=0; + uint8_t *output; + size_t output_len; + int opt; + int decode = 0; + int url = 0; + + + while ((opt = getopt(argc, argv, "du")) != -1) { + switch (opt) { + case 'd': + decode = 1; + break; + case 'u': + url = 1; + break; + + default: /* '?' */ + fprintf(stderr, "Usage: %s [-d] [-u]\n", argv[0]); + exit(EXIT_FAILURE); + + } + } + + if (scanf("%1024mc%n", &buffer, (int *)&buffer_len) < 1) { + return 1; + } + + + if (decode) { + /* decode */ + if (url) { + nsu_base64_decode_alloc_url(buffer, buffer_len, &output, &output_len); + } else { + + nsu_base64_decode_alloc(buffer, buffer_len, &output, &output_len); + } + } else { + /* encode */ + if (url) { + nsu_base64_encode_alloc_url(buffer, buffer_len, &output, &output_len); + } else { + nsu_base64_encode_alloc(buffer, buffer_len, &output, &output_len); + } + } + + if (output != NULL) { + printf("%.*s", (int)output_len, output); + free(output); + } + + free(buffer); + + return 0; } -- cgit v1.2.3