aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-03-10 18:08:47 +0200
committerThomas Voss <mail@thomasvoss.com> 2024-03-10 18:08:47 +0200
commit286995a43141dda597766eeeba9504d0148575e8 (patch)
treedbf76fb7826e06c4d5d3506409068408128aa39d /lib
parent7f4efec068c74c027b7dcb07c7ea93aacaaecc60 (diff)
Add the U8_ARGS() macro
Diffstat (limited to 'lib')
-rw-r--r--lib/mbstring/rtou8.c4
-rw-r--r--lib/mbstring/u8chr.c4
-rw-r--r--lib/mbstring/u8cmp.c6
-rw-r--r--lib/mbstring/u8rchr.c2
-rw-r--r--lib/optparse/optparse.c26
5 files changed, 21 insertions, 21 deletions
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;
}