From 286995a43141dda597766eeeba9504d0148575e8 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Sun, 10 Mar 2024 18:08:47 +0200 Subject: Add the U8_ARGS() macro --- lib/mbstring/rtou8.c | 4 ++-- lib/mbstring/u8chr.c | 4 ++-- lib/mbstring/u8cmp.c | 6 ++---- lib/mbstring/u8rchr.c | 2 +- lib/optparse/optparse.c | 26 ++++++++++++++------------ 5 files changed, 21 insertions(+), 21 deletions(-) (limited to 'lib') diff --git a/lib/mbstring/rtou8.c b/lib/mbstring/rtou8.c index 0ddac89..c11e89c 100644 --- a/lib/mbstring/rtou8.c +++ b/lib/mbstring/rtou8.c @@ -4,7 +4,7 @@ #include "rune.h" int -rtou8(char8_t *s, rune ch, size_t n) +rtou8(char8_t *s, size_t n, rune ch) { if (ch <= U8_1B_MAX) { if (n >= 1) @@ -33,5 +33,5 @@ rtou8(char8_t *s, rune ch, size_t n) return 4; } - return rtou8(s, RUNE_ERROR, n); + return rtou8(s, n, RUNE_ERROR); } diff --git a/lib/mbstring/u8chr.c b/lib/mbstring/u8chr.c index b7df221..2ce4e11 100644 --- a/lib/mbstring/u8chr.c +++ b/lib/mbstring/u8chr.c @@ -75,10 +75,10 @@ memmem4(const char8_t *h, size_t k, const char8_t *n) } char8_t * -u8chr(const char8_t *s, rune ch, size_t n) +u8chr(const char8_t *s, size_t n, rune ch) { char8_t buf[U8_LEN_MAX]; - int m = rtou8(buf, ch, sizeof(buf)); + int m = rtou8(buf, sizeof(buf), ch); if (n < (size_t)m) return nullptr; diff --git a/lib/mbstring/u8cmp.c b/lib/mbstring/u8cmp.c index 732896c..8bd2400 100644 --- a/lib/mbstring/u8cmp.c +++ b/lib/mbstring/u8cmp.c @@ -3,9 +3,7 @@ #include "mbstring.h" int -u8cmp(struct u8view x, struct u8view y) +u8cmp(const char8_t *x, size_t n, const char8_t *y, size_t m) { - if (x.len != y.len) - return x.len > y.len ? +1 : -1; - return memcmp(x.p, y.p, x.len); + return n != m ? (n > m ? +1 : -1) : memcmp(x, y, n); } diff --git a/lib/mbstring/u8rchr.c b/lib/mbstring/u8rchr.c index 1ffe445..df6be06 100644 --- a/lib/mbstring/u8rchr.c +++ b/lib/mbstring/u8rchr.c @@ -65,7 +65,7 @@ memrchr4(const char8_t *h, size_t k, const char8_t *n) } char8_t * -u8rchr(const char8_t *s, rune ch, size_t n) +u8rchr(const char8_t *s, size_t n, rune ch) { char8_t buf[U8_LEN_MAX]; int m = rtou8(buf, ch, sizeof(buf)); diff --git a/lib/optparse/optparse.c b/lib/optparse/optparse.c index ec2e470..931bf09 100644 --- a/lib/optparse/optparse.c +++ b/lib/optparse/optparse.c @@ -9,8 +9,9 @@ #define OPT_MSG_MISSING "option requires an argument" #define OPT_MSG_TOOMANY "option takes no arguments" -#define IS_SHORTOPT(s) ((s).len > 1 && (s).p[0] == '-' && (s).p[1] != '-') -#define IS_LONGOPT(s) ((s).len > 2 && (s).p[0] == '-' && (s).p[1] == '-') +#define IS_DASHDASH(s) ((s).len == 2 && (s).p[0] == '-' && (s).p[1] == '-') +#define IS_LONGOPT(s) ((s).len >= 3 && (s).p[0] == '-' && (s).p[1] == '-') +#define IS_SHORTOPT(s) ((s).len >= 2 && (s).p[0] == '-' && (s).p[1] != '-') #define error(st, msg, x) \ _Generic((x), struct u8view: error_s, rune: error_r)((st), (msg), (x)) @@ -39,7 +40,7 @@ optparse(struct optparse *st, const struct op_option *opts, size_t nopts) return 0; opt.len = strlen(opt.p); - if (u8eq(opt, U8V("--"))) { + if (IS_DASHDASH(opt)) { st->optind++; return 0; } @@ -63,12 +64,8 @@ optparse(struct optparse *st, const struct op_option *opts, size_t nopts) }; for (size_t i = 0; i < nopts; i++) { - if (!u8haspfx(opts[i].longopt.p, opts[i].longopt.len, opt_no_eq.p, - opt_no_eq.len)) - { + if (!u8haspfx(U8_ARGS(opts[i].longopt), U8_ARGS(opt_no_eq))) continue; - } - if (o) return error(st, OPT_MSG_INVALID, opt_no_eq); o = opts + i; @@ -87,8 +84,10 @@ optparse(struct optparse *st, const struct op_option *opts, size_t nopts) st->optarg = (struct u8view){}; else { ASSUME(opt.len > opt_no_eq.len); - st->optarg.p = eq_p + 1; - st->optarg.len = opt.len - opt_no_eq.len + 1; + st->optarg = (struct u8view){ + .p = eq_p + 1, + .len = opt.len - opt_no_eq.len + 1, + }; } break; case OPT_REQ: @@ -99,11 +98,14 @@ optparse(struct optparse *st, const struct op_option *opts, size_t nopts) st->optarg.len = strlen(st->optarg.p); } else { ASSUME(opt.len > opt_no_eq.len); - st->optarg.p = eq_p + 1; - st->optarg.len = opt.len - opt_no_eq.len + 1; + st->optarg = (struct u8view){ + .p = eq_p + 1, + .len = opt.len - opt_no_eq.len + 1, + }; } break; } + return o->shortopt; } -- cgit v1.2.3