diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2025-05-19 06:19:27 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska@appnovation.com> | 2025-05-19 06:19:27 +0000 |
| commit | e5831d197bd2a0cf0cecd1a6e9de63a68b75bc32 (patch) | |
| tree | 55efc6bb274a6e350ae312c795fb44ea954695d3 /src/libstddjb | |
| parent | b708eef95c98ba9215f5eef2c2911e4f87ebc7a5 (diff) | |
| download | skalibs-e5831d197bd2a0cf0cecd1a6e9de63a68b75bc32.tar.gz | |
gol fixes and improvements
Signed-off-by: Laurent Bercot <ska@appnovation.com>
Diffstat (limited to 'src/libstddjb')
| -rw-r--r-- | src/libstddjb/gol.c | 5 | ||||
| -rw-r--r-- | src/libstddjb/gol_argv.c | 11 |
2 files changed, 11 insertions, 5 deletions
diff --git a/src/libstddjb/gol.c b/src/libstddjb/gol.c index bc1f7b9..c608ed4 100644 --- a/src/libstddjb/gol.c +++ b/src/libstddjb/gol.c @@ -18,8 +18,9 @@ int gol (char const *const *argv, unsigned int argc, gol_bool const *b, unsigned if (x) { size_t len = x - argv[i] - 2 ; + if (!len) return (*problem = 0, -1-i) ; for (; j < an ; j++) if (!strncmp(argv[i] + 2, a[j].lo, len) && !a[j].lo[len]) break ; - if (j >= an) return (*problem = -1, -1-i) ; + if (j >= an) return (*problem = -len-2, -1-i) ; ar[a[j].i] = x + 1 ; } else @@ -32,7 +33,7 @@ int gol (char const *const *argv, unsigned int argc, gol_bool const *b, unsigned else { char const *p = argv[i] + 1 ; - for (; !*p ; p++) + for (; *p ; p++) { unsigned int j = 0 ; for (; j < an ; j++) if (*p == a[j].so) break ; diff --git a/src/libstddjb/gol_argv.c b/src/libstddjb/gol_argv.c index 2538f5a..4b37811 100644 --- a/src/libstddjb/gol_argv.c +++ b/src/libstddjb/gol_argv.c @@ -15,12 +15,17 @@ unsigned int gol_argv (int argc, char const *const *argv, gol_bool const *b, uns if (r < 0) { - if (problem >= 0) + if (problem > 0) { char s[2] = { argv[-r][problem], 0 } ; - strerr_dief4x(100, "unrecognized ", "short", "option: ", s) ; + strerr_dief4x(100, "unrecognized ", "short ", "option: ", s) ; } - else strerr_dief3x(100, "unrecognized ", "option: ", argv[-r]) ; + else if (!problem) + strerr_dief3x(100, "invalid ", "option: ", argv[-r]) ; + else if (problem == -1) + strerr_dief4x(100, "unrecognized ", "boolean ", "option: ", argv[-r]) ; + else + strerr_dief3x(100, "unrecognized ", "option with argument: ", argv[-r]) ; } else return r + 1 ; } |
