summaryrefslogtreecommitdiff
path: root/test/base64.c
diff options
context:
space:
mode:
authorVincent Sanders <vince@kyllikki.org>2020-02-21 19:52:14 +0000
committerVincent Sanders <vince@kyllikki.org>2020-02-21 19:52:14 +0000
commitb7199a77aca01f85a3359737cd4e6c73c29bd82a (patch)
tree2b2cc48e145ef725e967886570623dd305402cd7 /test/base64.c
parent28a80ecdf8588afe5ee521acf3ba48d81aae7373 (diff)
downloadlibnsutils-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.c84
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;
}