about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorphoebos <ben@bvnf.space>2021-07-06 18:25:01 +0100
committerphoebos <ben@bvnf.space>2021-07-06 18:25:01 +0100
commit820f54a47ef9f5f01d1abbc196eaa09d64cb09b4 (patch)
tree45214344bb50244eac57127e7f3d28ec3c1e78a5
parentfb8250fa0c3f6d1f052d36219ad5e3fa0852b4d4 (diff)
downloadkandr-820f54a47ef9f5f01d1abbc196eaa09d64cb09b4.tar.gz
base64: initial getopt and read files
-rw-r--r--Makefile8
-rw-r--r--base64.c79
2 files changed, 87 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..b68d58a
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,8 @@
+DEBUG=-g
+CFLAGS+=-Wall -Wextra -Wpedantic
+
+%.c :
+	$(CC) $(CFLAGS) $(DEBUG) $@
+
+base64: base64.c
+	$(CC) $(CFLAGS) $(DEBUG) -o $@ base64.c
diff --git a/base64.c b/base64.c
new file mode 100644
index 0000000..da7e99e
--- /dev/null
+++ b/base64.c
@@ -0,0 +1,79 @@
+/* Copyright (c) 2021 Ben Fuller
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the “Software”),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+ * NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ * USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#include <unistd.h>
+#include <stdio.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#define BUF_SIZE 1000
+
+static void usage(const char *name) {
+    fprintf(stderr, "usage: %s [-d] [FILE]\n", name);
+}
+
+int main(int argc, char **argv) {
+
+    int c;
+    unsigned dflg;
+    const char *name = argv[0];
+    while ((c = getopt(argc, argv, "dh")) != -1) {
+        switch(c) {
+            case 'd':
+                dflg++;
+                break;
+            case 'h':
+                usage(name);
+                return 0;
+                break;
+            case '?':
+                usage(name);
+                return 2;
+                break;
+        }
+    }
+    int fd;
+    for (; optind < argc; optind++) {
+        if (*argv[optind] == '-') {
+            fd = STDIN_FILENO;
+        } else {
+            if ((fd = open(argv[optind], O_RDONLY)) == -1 ) {
+                perror(argv[optind]);
+                return 1;
+            }
+        }
+        char buf[BUF_SIZE] = {'\0'};
+        if (read(fd, buf, BUF_SIZE) == -1 ) {
+            perror("read");
+            return 1;
+        }
+        printf("%s\n", buf);
+
+        if (close(fd) != 0) {
+            perror("close");
+            return 1;
+        }
+
+
+    }
+    return 0;
+
+}