diff options
author | Adam Chlipala <adam@chlipala.net> | 2019-03-23 20:16:15 -0400 |
---|---|---|
committer | Adam Chlipala <adam@chlipala.net> | 2019-03-23 20:16:15 -0400 |
commit | 3f119f5c0a5f210ed442841dfed3ae98786004e9 (patch) | |
tree | 9cc52e33546dd2ff9101ec139f11eaf545eb31c1 /src/c | |
parent | 18d42a0f0829132803a8c508e1d1cc797c6dbbde (diff) |
Supporting 'char' arguments to handlers called from client code
Diffstat (limited to 'src/c')
-rw-r--r-- | src/c/urweb.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/c/urweb.c b/src/c/urweb.c index 58f7884d..4d9e8630 100644 --- a/src/c/urweb.c +++ b/src/c/urweb.c @@ -2267,6 +2267,23 @@ uw_Basis_string uw_Basis_unurlifyString(uw_context ctx, char **s) { return r; } +uw_Basis_char uw_Basis_unurlifyChar(uw_context ctx, char **s) { + char *new_s = uw_unurlify_advance(*s); + char *r; + int len; + + len = strlen(*s); + uw_check_heap(ctx, len + 1); + + r = ctx->heap.front; + ctx->heap.front = uw_unurlifyString_to(0, ctx, ctx->heap.front, *s); + *s = new_s; + if (strlen(r) == 1) + return r[0]; + else + uw_error(ctx, FATAL, "Unurlified character is multiple characters long"); +} + uw_Basis_unit uw_Basis_unurlifyUnit(uw_context ctx, char **s) { (void)ctx; *s = uw_unurlify_advance(*s); |