summary refs log tree commit diff
path: root/main.c
diff options
context:
space:
mode:
authorNakidai <nakidai@disroot.org>2025-03-24 22:53:57 +0300
committerNakidai <nakidai@disroot.org>2025-03-24 22:53:57 +0300
commite8703c985af8cbe2de5eb235c7ec295ce1811c7f (patch)
treea6f82af9b65624d46ef19160f24ac0d7f2e03211 /main.c
parentf312b357ab2ec3cf83a67945f3641b964a59e8d2 (diff)
download3cl-e8703c985af8cbe2de5eb235c7ec295ce1811c7f.tar.gz
3cl-e8703c985af8cbe2de5eb235c7ec295ce1811c7f.zip
Some improvements
- Fix paser
- Add verbose mode
Diffstat (limited to 'main.c')
-rw-r--r--main.c50
1 files changed, 30 insertions, 20 deletions
diff --git a/main.c b/main.c
index a5f79e7..262e9b6 100644
--- a/main.c
+++ b/main.c
@@ -3,39 +3,49 @@
 #include <assert.h>
 #include <err.h>
 #include <stdio.h>
+#include <stdlib.h>
 
+#include <unistd.h>
+
+
+int verbose = 0;
 
 int main(int argc, char **argv)
 {
-    if (!argv[1])
+    int ch;
+    while ((ch = getopt(argc, argv, "v")) >= 0)
+    {
+        switch (ch)
+        {
+            case 'v':
+            {
+                verbose = 1;
+            } break;
+            default:
+            {
+                fprintf(stderr, "usage: %s [-v] file\n", argv[0]);
+                exit(1);
+            } break;
+        }
+    }
+    argc -= optind;
+    argv += optind;
+
+    if (!*argv)
         return 1;
 
     struct cccl_File file;
 
-    int error = cccl_allocfile(argv[1], &file);
+    int error = cccl_allocfile(*argv, &file);
     if (error)
         err(1, "cccl_readfile()");
 
-    FILE *f = fopen(argv[1], "r");
+    FILE *f = fopen(*argv, "r");
     if (!f)
         err(1, "fopen()");
-    int bytes_read = 0;
-    while (bytes_read < file.size)
-    {
-        int read_now = fread(
-            file.buffer + bytes_read,
-            sizeof(*file.buffer),
-            (file.size - bytes_read) % 2048,
-            f
-        );
-        if (read_now == 0)
-        {
-            if (ferror(f))
-                errx(1, "couldn't read %s", argv[1]);
-            else
-                break;
-        }
-    }
+    int bytes_read = fread(file.buffer, 1, file.size, f);
+    if (ferror(f) || bytes_read != file.size)
+        errx(1, "couldn't read %s", *argv);
     fclose(f);
 
     cccl(file);