diff options
author | Fulton Browne <git@fulton.software> | 2021-05-16 02:58:22 +0000 |
---|---|---|
committer | Fulton Browne <git@fulton.software> | 2021-05-16 02:58:22 +0000 |
commit | 712a87ab8526492284f6dcfe0249d24ea3ffc66f (patch) | |
tree | 369bfd0c76933b4f206fe791adbe4867caaf3f94 | |
parent | a7354ac7c6e4ddcf36e3d60851c98caa4e2d7dc1 (diff) | |
download | base64-712a87ab8526492284f6dcfe0249d24ea3ffc66f.tar.gz |
stuff
-rw-r--r-- | base64decode.c | 58 | ||||
-rw-r--r-- | base64encode.c | 2 |
2 files changed, 59 insertions, 1 deletions
diff --git a/base64decode.c b/base64decode.c new file mode 100644 index 0000000..625f08f --- /dev/null +++ b/base64decode.c @@ -0,0 +1,58 @@ +#include <u.h> +#include <libc.h> +#include "base64.h" + +void +usage(void) +{ + fprint(2, "base64decode [file]\n"); + exits("usage"); +} + +static void +decode(int fd, char *name) +{ + int n; + long tot; + char *buf, *outbuf; + outbuf = nil; + buf = nil; + tot = 0; + for(;;){ + buf = realloc(buf, tot+8192); + if(buf == nil) + sysfatal("realloc: %r"); + if((n = read(fd, buf+tot, 8192)) < 0) + sysfatal("read: %r"); + if(n == 0) + break; + tot += n; + } + buf[tot] = 0; + print("DEBUG: %d \n", strlen(outbuf)); + outbuf = malloc(b64d_size(strlen(buf))); + b64_decode(buf, strlen(buf), outbuf); + if((n=write(1, outbuf, strlen(outbuf))) != strlen(outbuf)) + sysfatal("writing bytes failed"); +} + +void +main(int argc, char **argv) +{ + int fd; + char *file; + fd = 0; + file = "stdin"; + ARGBEGIN{ + default: + usage(); + }ARGEND + if(argc != 0 && argc != 1) + usage(); + if(argc == 1){ + file = argv[0]; + if((fd = open(file, OREAD)) < 0) + sysfatal("can'topen %s", file); + } + decode(fd, file); +} \ No newline at end of file diff --git a/base64encode.c b/base64encode.c index b6f0fe6..f27f4e0 100644 --- a/base64encode.c +++ b/base64encode.c @@ -28,7 +28,7 @@ encode(int fd, char *name) tot += n; } buf[tot] = 0; - outbuf = malloc(1 + (sizeof(char) * b64d_size(strlen(buf)))); + outbuf = malloc(1 + (sizeof(char) * b64e_size(strlen(buf)))); b64_encode(buf, strlen(buf), outbuf); if((n=write(1, outbuf, strlen(outbuf))) != strlen(outbuf)) sysfatal("writing bytes failed"); |