aboutsummaryrefslogtreecommitdiffstats
path: root/src/libstddjb
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2025-05-26 10:12:21 +0000
committerLaurent Bercot <ska@appnovation.com>2025-05-26 10:12:21 +0000
commit0da952ff83d8c5b97bbd350acbadbcd8b616cf19 (patch)
tree750fa8cef603bf64c3f1a2471e5b3ebcf91be78c /src/libstddjb
parente5831d197bd2a0cf0cecd1a6e9de63a68b75bc32 (diff)
downloadskalibs-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.c9
-rw-r--r--src/libstddjb/gol_argv.c11
-rw-r--r--src/libstddjb/gol_main.c13
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) ;
+}