From d3025b14b9c13286b79f256d019a99da9425ea0e Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Sat, 15 May 2021 11:14:03 -0500 Subject: Convert utf8towc from wchar_t to unsigned (to match wctoutf8). The maximum unicode code point is 0x10ffff which is 21 bits. --- lib/lib.c | 6 +++--- lib/lib.h | 2 +- lib/linestack.c | 3 +-- lib/llist.c | 2 +- 4 files changed, 6 insertions(+), 7 deletions(-) (limited to 'lib') diff --git a/lib/lib.c b/lib/lib.c index 87bda4f6..9f9b8136 100644 --- a/lib/lib.c +++ b/lib/lib.c @@ -370,7 +370,7 @@ int wctoutf8(char *s, unsigned wc) // Convert utf8 sequence to a unicode wide character // returns bytes consumed, or -1 if err, or -2 if need more data. -int utf8towc(wchar_t *wc, char *str, unsigned len) +int utf8towc(unsigned *wc, char *str, unsigned len) { unsigned result, mask, first; char *s, c; @@ -403,7 +403,7 @@ char *strlower(char *s) { char *try, *new; int len, mlen = (strlen(s)|7)+9; - wchar_t c; + unsigned c; try = new = xmalloc(mlen); @@ -739,7 +739,7 @@ void loopfiles(char **argv, void (*function)(int fd, char *name)) loopfiles_rw(argv, O_RDONLY|O_CLOEXEC|WARN_ONLY, 0, function); } -// glue to call dl_lines() from loopfiles +// glue to call do_lines() from loopfiles static void (*do_lines_bridge)(char **pline, long len); static void loopfile_lines_bridge(int fd, char *name) { diff --git a/lib/lib.h b/lib/lib.h index f9c04281..cf1920f9 100644 --- a/lib/lib.h +++ b/lib/lib.h @@ -231,7 +231,7 @@ long long atolx(char *c); long long atolx_range(char *numstr, long long low, long long high); int stridx(char *haystack, char needle); int wctoutf8(char *s, unsigned wc); -int utf8towc(wchar_t *wc, char *str, unsigned len); +int utf8towc(unsigned *wc, char *str, unsigned len); char *strlower(char *s); char *strafter(char *haystack, char *needle); char *chomp(char *s); diff --git a/lib/linestack.c b/lib/linestack.c index 0fc83e6b..e6ae1b57 100644 --- a/lib/linestack.c +++ b/lib/linestack.c @@ -93,10 +93,9 @@ int crunch_str(char **str, int width, FILE *out, char *escmore, { int columns = 0, col, bytes; char *start, *end; + unsigned wc; for (end = start = *str; *end; columns += col, end += bytes) { - wchar_t wc; - if ((bytes = utf8towc(&wc, end, 4))>0 && (col = wcwidth(wc))>=0) { if (!escmore || wc>255 || !strchr(escmore, wc)) { if (width-columnsprev is new node) void dlist_add_nomalloc(struct double_list **list, struct double_list *new) { if (*list) { @@ -92,7 +93,6 @@ void dlist_add_nomalloc(struct double_list **list, struct double_list *new) } else *list = new->next = new->prev = new; } - // Add an entry to the end of a doubly linked list struct double_list *dlist_add(struct double_list **list, char *data) { -- cgit v1.2.3