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;
+
+}