diff options
| author | Nakidai <nakidai@disroot.org> | 2025-03-24 22:53:57 +0300 |
|---|---|---|
| committer | Nakidai <nakidai@disroot.org> | 2025-03-24 22:53:57 +0300 |
| commit | e8703c985af8cbe2de5eb235c7ec295ce1811c7f (patch) | |
| tree | a6f82af9b65624d46ef19160f24ac0d7f2e03211 /main.c | |
| parent | f312b357ab2ec3cf83a67945f3641b964a59e8d2 (diff) | |
| download | 3cl-e8703c985af8cbe2de5eb235c7ec295ce1811c7f.tar.gz 3cl-e8703c985af8cbe2de5eb235c7ec295ce1811c7f.zip | |
Some improvements
- Fix paser - Add verbose mode
Diffstat (limited to 'main.c')
| -rw-r--r-- | main.c | 50 |
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); |