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 +#include +#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");