wcwidth.c (129608) | wcwidth.c (133564) |
---|---|
1/* 2 * Copyright (c) 1989, 1993 3 * The Regents of the University of California. All rights reserved. 4 * (c) UNIX System Laboratories, Inc. 5 * All or some portions of this file are derived from material licensed 6 * to the University of California by American Telephone and Telegraph 7 * Co. or Unix System Laboratories, Inc. and are reproduced herein with 8 * the permission of UNIX System Laboratories, Inc. --- 26 unchanged lines hidden (view full) --- 35 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 36 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 37 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 38 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 39 * SUCH DAMAGE. 40 */ 41 42#include <sys/cdefs.h> | 1/* 2 * Copyright (c) 1989, 1993 3 * The Regents of the University of California. All rights reserved. 4 * (c) UNIX System Laboratories, Inc. 5 * All or some portions of this file are derived from material licensed 6 * to the University of California by American Telephone and Telegraph 7 * Co. or Unix System Laboratories, Inc. and are reproduced herein with 8 * the permission of UNIX System Laboratories, Inc. --- 26 unchanged lines hidden (view full) --- 35 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 36 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 37 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 38 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 39 * SUCH DAMAGE. 40 */ 41 42#include <sys/cdefs.h> |
43__FBSDID("$FreeBSD: head/lib/libc/locale/wcwidth.c 129608 2004-05-23 13:20:09Z tjr $"); | 43__FBSDID("$FreeBSD: head/lib/libc/locale/wcwidth.c 133564 2004-08-12 12:19:11Z tjr $"); |
44 45#include <wchar.h> | 44 45#include <wchar.h> |
46#include <wctype.h> | |
47 | 46 |
48#define _CTYPE_SWM 0xe0000000L /* Mask to get screen width data */ 49#define _CTYPE_SWS 30 /* Bits to shift to get width */ | 47#undef wcwidth |
50 51int 52wcwidth(wchar_t wc) 53{ | 48 49int 50wcwidth(wchar_t wc) 51{ |
54 unsigned int x; | |
55 | 52 |
56 if (wc == L'\0') 57 return (0); 58 59 x = (unsigned int)__maskrune(wc, _CTYPE_SWM|_CTYPE_R); 60 if ((x & _CTYPE_SWM) != 0) 61 return ((x & _CTYPE_SWM) >> _CTYPE_SWS); 62 return ((x & _CTYPE_R) != 0 ? 1 : -1); | 53 return (__wcwidth(wc)); |
63} | 54} |