On Mon, Apr 04, 2011 at 06:44:10PM +0000, Miod Vallat wrote: > > > Would it be better maybe to do the check in the Width() macro itself? > > > > Yes indeed. New diff below. > > > -#define Width(c) wcwidth(c) > > +#define Width(c) (wcwidth(c) == -1 ? 0 : wcwidth(c)) > > But this calls wcwidth() to be invoked twice, which is ugly. As a > minimum, make this an inline function.
Oops, already committed. What about this as a follow-up? Index: chartype.c =================================================================== RCS file: /cvs/src/lib/libedit/chartype.c,v retrieving revision 1.2 diff -u -p -r1.2 chartype.c --- chartype.c 4 Apr 2011 18:48:17 -0000 1.2 +++ chartype.c 4 Apr 2011 19:01:49 -0000 @@ -358,3 +358,14 @@ ct_chr_class(Char c) else return CHTYPE_NONPRINT; } + +inline int +Width(Int c) +{ +#ifdef WIDECHAR + int w = wcwidth(c); + return (w == -1 ? 0 : w); +#else + return 1; +#endif +} Index: chartype.h =================================================================== RCS file: /cvs/src/lib/libedit/chartype.h,v retrieving revision 1.2 diff -u -p -r1.2 chartype.h --- chartype.h 4 Apr 2011 18:48:17 -0000 1.2 +++ chartype.h 4 Apr 2011 19:01:25 -0000 @@ -106,8 +106,6 @@ #define Strtol(p,e,b) wcstol(p,e,b) -#define Width(c) (wcwidth(c) == -1 ? 0 : wcwidth(c)) - #else /* NARROW */ #define ct_mbtowc error @@ -156,10 +154,9 @@ #define Strtol(p,e,b) strtol(p,e,b) -#define Width(c) 1 - #endif +int Width(Int c); #ifdef WIDECHAR /*