diff options
author | Vincent Sanders <vince@kyllikki.org> | 2020-02-21 19:52:14 +0000 |
---|---|---|
committer | Vincent Sanders <vince@kyllikki.org> | 2020-02-21 19:52:14 +0000 |
commit | b7199a77aca01f85a3359737cd4e6c73c29bd82a (patch) | |
tree | 2b2cc48e145ef725e967886570623dd305402cd7 /test/base64.c | |
parent | 28a80ecdf8588afe5ee521acf3ba48d81aae7373 (diff) | |
download | libnsutils-b7199a77aca01f85a3359737cd4e6c73c29bd82a.tar.gz libnsutils-b7199a77aca01f85a3359737cd4e6c73c29bd82a.tar.bz2 |
extend base64 api with url safe versions
Diffstat (limited to 'test/base64.c')
-rw-r--r-- | test/base64.c | 84 |
1 files changed, 56 insertions, 28 deletions
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 <stdio.h> #include <stdint.h> #include <stdlib.h> +#include <unistd.h> #include <nsutils/base64.h> 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; } |