about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorFulton Browne <git@fulton.software>2021-05-16 02:58:22 +0000
committerFulton Browne <git@fulton.software>2021-05-16 02:58:22 +0000
commit712a87ab8526492284f6dcfe0249d24ea3ffc66f (patch)
tree369bfd0c76933b4f206fe791adbe4867caaf3f94
parenta7354ac7c6e4ddcf36e3d60851c98caa4e2d7dc1 (diff)
downloadbase64-712a87ab8526492284f6dcfe0249d24ea3ffc66f.tar.gz
stuff
-rw-r--r--base64decode.c58
-rw-r--r--base64encode.c2
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");