* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libc/locale/wcwidth.c,v 1.5 2002/08/19 20:32:27 ache Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/locale/wcwidth.c,v 1.8 2007/01/09 00:28:01 imp Exp $");
+
+#include "xlocale_private.h"
#include <wchar.h>
-#include <wctype.h>
-#define _CTYPE_SWM 0xe0000000L /* Mask to get screen width data */
-#define _CTYPE_SWS 30 /* Bits to shift to get width */
+#undef wcwidth
int
wcwidth(wchar_t wc)
{
- int width;
- if (wc == L'\0')
- return (0);
+ return (__wcwidth_l(wc, __current_locale()));
+}
- width = __maskrune(wc, _CTYPE_SWM);
+int
+wcwidth_l(wchar_t wc, locale_t loc)
+{
- /* 0 is autowidth (default) */
- return (width ? (int)((unsigned)width >> _CTYPE_SWS)
- : (iswprint(wc) ? 1 : -1));
+ NORMALIZE_LOCALE(loc);
+ return (__wcwidth_l(wc, loc));
}
-