diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2025-05-26 10:12:21 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska@appnovation.com> | 2025-05-26 10:12:21 +0000 |
| commit | 0da952ff83d8c5b97bbd350acbadbcd8b616cf19 (patch) | |
| tree | 750fa8cef603bf64c3f1a2471e5b3ebcf91be78c /src/libstddjb | |
| parent | e5831d197bd2a0cf0cecd1a6e9de63a68b75bc32 (diff) | |
| download | skalibs-0da952ff83d8c5b97bbd350acbadbcd8b616cf19.tar.gz | |
Improve gol. Add tentative dylib support.
Signed-off-by: Laurent Bercot <ska@appnovation.com>
Diffstat (limited to 'src/libstddjb')
| -rw-r--r-- | src/libstddjb/gol.c | 9 | ||||
| -rw-r--r-- | src/libstddjb/gol_argv.c | 11 | ||||
| -rw-r--r-- | src/libstddjb/gol_main.c | 13 |
3 files changed, 21 insertions, 12 deletions
diff --git a/src/libstddjb/gol.c b/src/libstddjb/gol.c index c608ed4..990cd73 100644 --- a/src/libstddjb/gol.c +++ b/src/libstddjb/gol.c @@ -4,9 +4,10 @@ #include <skalibs/gol.h> -int gol (char const *const *argv, unsigned int argc, gol_bool const *b, unsigned int bn, gol_arg const *a, unsigned int an, uint64_t *br, char const **ar, int *problem) +int gol (char const *const *argv, gol_bool const *b, unsigned int bn, gol_arg const *a, unsigned int an, uint64_t *br, char const **ar, int *problem) { - for (unsigned int i = 0 ; i < argc ; i++) + unsigned int i = 0 ; + for (; argv[i] ; i++) { if (argv[i][0] != '-' || !argv[i][1]) return i ; if (argv[i][1] == '-') @@ -40,7 +41,7 @@ int gol (char const *const *argv, unsigned int argc, gol_bool const *b, unsigned if (j < an) { if (p[1]) ar[a[j].i] = p + 1 ; - else if (i+1 < argc && strcmp(argv[i+1], "--")) ar[a[j].i] = argv[++i] ; + else if (argv[i+1] && strcmp(argv[i+1], "--")) ar[a[j].i] = argv[++i] ; break ; } for (j = 0 ; j < bn ; j++) if (*p == b[j].so) break ; @@ -49,5 +50,5 @@ int gol (char const *const *argv, unsigned int argc, gol_bool const *b, unsigned } } } - return argc ; + return i ; } diff --git a/src/libstddjb/gol_argv.c b/src/libstddjb/gol_argv.c index 4b37811..21dc790 100644 --- a/src/libstddjb/gol_argv.c +++ b/src/libstddjb/gol_argv.c @@ -1,17 +1,12 @@ /* ISC license. */ -#include <string.h> - #include <skalibs/gol.h> #include <skalibs/strerr.h> -unsigned int gol_argv (int argc, char const *const *argv, gol_bool const *b, unsigned int bn, gol_arg const *a, unsigned int an, uint64_t *br, char const **ar) +unsigned int gol_argv (char const *const *argv, gol_bool const *b, unsigned int bn, gol_arg const *a, unsigned int an, uint64_t *br, char const **ar) { int problem = 0 ; - int r ; - if (!argc) strerr_diefu1x(100, "gol: invalid argv") ; - if (argc == 1) return 1 ; - r = gol(argv + 1, argc - 1, b, bn, a, an, br, ar, &problem) ; + int r = gol(argv, b, bn, a, an, br, ar, &problem) ; if (r < 0) { @@ -27,5 +22,5 @@ unsigned int gol_argv (int argc, char const *const *argv, gol_bool const *b, uns else strerr_dief3x(100, "unrecognized ", "option with argument: ", argv[-r]) ; } - else return r + 1 ; + else return r ; } diff --git a/src/libstddjb/gol_main.c b/src/libstddjb/gol_main.c new file mode 100644 index 0000000..1915fca --- /dev/null +++ b/src/libstddjb/gol_main.c @@ -0,0 +1,13 @@ +/* ISC license. */ + +#include <string.h> + +#include <skalibs/gol.h> +#include <skalibs/strerr.h> + +unsigned int gol_main (int argc, char const *const *argv, gol_bool const *b, unsigned int bn, gol_arg const *a, unsigned int an, uint64_t *br, char const **ar) +{ + if (argc < 1 || argv[argc]) strerr_diefu1x(100, "gol: invalid argc/argv") ; + if (argc == 1) return 1 ; + return 1 + gol_argv(argv + 1, b, bn, a, an, br, ar) ; +} |
