commit 820f54a47ef9f5f01d1abbc196eaa09d64cb09b4
parent fb8250fa0c3f6d1f052d36219ad5e3fa0852b4d4
Author: phoebos <ben@bvnf.space>
Date:   Tue,  6 Jul 2021 18:25:01 +0100
base64: initial getopt and read files
Diffstat:
| A | Makefile |  |  | 8 | ++++++++ | 
| A | base64.c |  |  | 79 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | 
2 files changed, 87 insertions(+), 0 deletions(-)
diff --git a/Makefile 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
@@ -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;
+
+}