1353450fbSAndrey A. Chernov /* 2353450fbSAndrey A. Chernov * Copyright (c) 1989, 1993 3353450fbSAndrey A. Chernov * The Regents of the University of California. All rights reserved. 4353450fbSAndrey A. Chernov * (c) UNIX System Laboratories, Inc. 5353450fbSAndrey A. Chernov * All or some portions of this file are derived from material licensed 6353450fbSAndrey A. Chernov * to the University of California by American Telephone and Telegraph 7353450fbSAndrey A. Chernov * Co. or Unix System Laboratories, Inc. and are reproduced herein with 8353450fbSAndrey A. Chernov * the permission of UNIX System Laboratories, Inc. 9353450fbSAndrey A. Chernov * 10353450fbSAndrey A. Chernov * This code is derived from software contributed to Berkeley by 11353450fbSAndrey A. Chernov * Paul Borman at Krystal Technologies. 129829d36aSTakuya SHIOZAKI * 139829d36aSTakuya SHIOZAKI * Redistribution and use in source and binary forms, with or without 149829d36aSTakuya SHIOZAKI * modification, are permitted provided that the following conditions 159829d36aSTakuya SHIOZAKI * are met: 169829d36aSTakuya SHIOZAKI * 1. Redistributions of source code must retain the above copyright 179829d36aSTakuya SHIOZAKI * notice, this list of conditions and the following disclaimer. 189829d36aSTakuya SHIOZAKI * 2. Redistributions in binary form must reproduce the above copyright 199829d36aSTakuya SHIOZAKI * notice, this list of conditions and the following disclaimer in the 209829d36aSTakuya SHIOZAKI * documentation and/or other materials provided with the distribution. 21353450fbSAndrey A. Chernov * 3. All advertising materials mentioning features or use of this software 22353450fbSAndrey A. Chernov * must display the following acknowledgement: 23353450fbSAndrey A. Chernov * This product includes software developed by the University of 24353450fbSAndrey A. Chernov * California, Berkeley and its contributors. 25353450fbSAndrey A. Chernov * 4. Neither the name of the University nor the names of its contributors 26353450fbSAndrey A. Chernov * may be used to endorse or promote products derived from this software 27353450fbSAndrey A. Chernov * without specific prior written permission. 289829d36aSTakuya SHIOZAKI * 29353450fbSAndrey A. Chernov * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 309829d36aSTakuya SHIOZAKI * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 319829d36aSTakuya SHIOZAKI * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 32353450fbSAndrey A. Chernov * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 339829d36aSTakuya SHIOZAKI * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 349829d36aSTakuya SHIOZAKI * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 359829d36aSTakuya SHIOZAKI * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 369829d36aSTakuya SHIOZAKI * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 379829d36aSTakuya SHIOZAKI * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 389829d36aSTakuya SHIOZAKI * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 399829d36aSTakuya SHIOZAKI * SUCH DAMAGE. 409829d36aSTakuya SHIOZAKI */ 419829d36aSTakuya SHIOZAKI 429829d36aSTakuya SHIOZAKI #include <sys/cdefs.h> 43de5fe5d5SDavid E. O'Brien __FBSDID("$FreeBSD$"); 449829d36aSTakuya SHIOZAKI 459829d36aSTakuya SHIOZAKI #include <wchar.h> 469829d36aSTakuya SHIOZAKI 479829d36aSTakuya SHIOZAKI int 48353450fbSAndrey A. Chernov wcswidth(const wchar_t *pwcs, size_t n) 499829d36aSTakuya SHIOZAKI { 50353450fbSAndrey A. Chernov wchar_t wc; 51353450fbSAndrey A. Chernov int len, l; 529829d36aSTakuya SHIOZAKI 53353450fbSAndrey A. Chernov len = 0; 54353450fbSAndrey A. Chernov while (n-- > 0 && (wc = *pwcs++) != L'\0') { 55353450fbSAndrey A. Chernov if ((l = wcwidth(wc)) < 0) 56353450fbSAndrey A. Chernov return (-1); 57353450fbSAndrey A. Chernov len += l; 58353450fbSAndrey A. Chernov } 59353450fbSAndrey A. Chernov return (len); 609829d36aSTakuya SHIOZAKI } 619829d36aSTakuya SHIOZAKI 62