diff options
author | Baptiste Daroussin <bapt@FreeBSD.org> | 2018-11-26 08:16:33 +0000 |
---|---|---|
committer | Baptiste Daroussin <bapt@FreeBSD.org> | 2018-11-26 08:16:33 +0000 |
commit | 6bbd1d19fd353c10ca9343ed76df312381524bf7 (patch) | |
tree | 4c85cb3014121c4315aa095a3d3c2b75ddd0f79d /lib/libedit | |
parent | acc84f29fede5380b47a642d8427f388c132158e (diff) |
Notes
Diffstat (limited to 'lib/libedit')
-rw-r--r-- | lib/libedit/chartype.c | 19 | ||||
-rw-r--r-- | lib/libedit/chartype.h | 2 | ||||
-rw-r--r-- | lib/libedit/el.c | 6 | ||||
-rw-r--r-- | lib/libedit/el.h | 1 | ||||
-rw-r--r-- | lib/libedit/read.c | 8 |
5 files changed, 12 insertions, 24 deletions
diff --git a/lib/libedit/chartype.c b/lib/libedit/chartype.c index 44fb953f85819..a695bdc384ecf 100644 --- a/lib/libedit/chartype.c +++ b/lib/libedit/chartype.c @@ -37,6 +37,7 @@ __RCSID("$NetBSD: chartype.c,v 1.23 2016/02/28 23:02:24 christos Exp $"); __FBSDID("$FreeBSD$"); #include <ctype.h> +#include <limits.h> #include <stdlib.h> #include <string.h> @@ -182,17 +183,13 @@ ct_decode_argv(int argc, const char *argv[], ct_buffer_t *conv) protected size_t ct_enc_width(Char c) { - /* UTF-8 encoding specific values */ - if (c < 0x80) - return 1; - else if (c < 0x0800) - return 2; - else if (c < 0x10000) - return 3; - else if (c < 0x110000) - return 4; - else - return 0; /* not a valid codepoint */ + mbstate_t ps = (mbstate_t){{0}}; + size_t len; + char cbuf[MB_LEN_MAX]; + len = ct_wcrtomb(cbuf, c, &ps); + if (len == (size_t)-1) + return (0); + return (len); } protected ssize_t diff --git a/lib/libedit/chartype.h b/lib/libedit/chartype.h index 9f5e7e407c8c0..317740f0d4046 100644 --- a/lib/libedit/chartype.h +++ b/lib/libedit/chartype.h @@ -56,6 +56,7 @@ #define ct_wctob wctob #define ct_wctomb wctomb +#define ct_wcrtomb wcrtomb #define ct_wctomb_reset wctomb(0,0) #define ct_wcstombs wcstombs #define ct_mbstowcs mbstowcs @@ -109,6 +110,7 @@ Width(wchar_t c) #define ct_wctob(w) ((int)(w)) #define ct_wctomb error +#define ct_wcrtomb error #define ct_wctomb_reset #define ct_wcstombs(a, b, c) (strncpy(a, b, c), strlen(a)) #define ct_mbstowcs(a, b, c) (strncpy(a, b, c), strlen(a)) diff --git a/lib/libedit/el.c b/lib/libedit/el.c index 81020b1827084..ea5b9b78d2f36 100644 --- a/lib/libedit/el.c +++ b/lib/libedit/el.c @@ -99,10 +99,6 @@ el_init_fd(const char *prog, FILE *fin, FILE *fout, FILE *ferr, * Initialize all the modules. Order is important!!! */ el->el_flags = 0; - if (setlocale(LC_CTYPE, NULL) != NULL){ - if (strcmp(nl_langinfo(CODESET), "UTF-8") == 0) - el->el_flags |= CHARSET_IS_UTF8; - } if (terminal_init(el) == -1) { el_free(el->el_prog); @@ -293,7 +289,7 @@ FUN(el,set)(EditLine *el, int op, ...) void *ptr = va_arg(ap, void *); rv = hist_set(el, func, ptr); - if (!(el->el_flags & CHARSET_IS_UTF8)) + if (MB_CUR_MAX == 1) el->el_flags &= ~NARROW_HISTORY; break; } diff --git a/lib/libedit/el.h b/lib/libedit/el.h index d6b69fc179ef2..8b728742911ac 100644 --- a/lib/libedit/el.h +++ b/lib/libedit/el.h @@ -56,7 +56,6 @@ #define NO_TTY 0x02 #define EDIT_DISABLED 0x04 #define UNBUFFERED 0x08 -#define CHARSET_IS_UTF8 0x10 #define NARROW_HISTORY 0x40 typedef unsigned char el_action_t; /* Index to command array */ diff --git a/lib/libedit/read.c b/lib/libedit/read.c index 66e266b5f79be..054177348dd32 100644 --- a/lib/libedit/read.c +++ b/lib/libedit/read.c @@ -363,13 +363,7 @@ read_char(EditLine *el, wchar_t *cp) goto again; } case (size_t)-2: - /* - * We don't support other multibyte charsets. - * The second condition shouldn't happen - * and is here merely for additional safety. - */ - if ((el->el_flags & CHARSET_IS_UTF8) == 0 || - cbp >= MB_LEN_MAX) { + if (cbp >= MB_LEN_MAX) { errno = EILSEQ; *cp = L'\0'; return -1; |