misc/51504: New file: src/share/mklocale/zh_CN.GBK.src

Statue statue at freebsd.sinica.edu.tw
Wed Apr 30 04:00:41 PDT 2003


The following reply was made to PR misc/51504; it has been noted by GNATS.

From: statue at freebsd.sinica.edu.tw (Statue)
To: freebsd-gnats-submit at FreeBSD.org
Cc:  
Subject: Re: misc/51504: New file: src/share/mklocale/zh_CN.GBK.src
Date: Wed, 30 Apr 2003 18:59:23 +0800 (CST)

 --- lib/libc/locale/Makefile.inc.orig	Wed Apr 30 18:34:26 2003
 +++ lib/libc/locale/Makefile.inc	Wed Apr 30 18:35:04 2003
 @@ -9,7 +9,7 @@
  	ldpart.c lmessages.c lmonetary.c lnumeric.c localeconv.c mbrune.c \
          mskanji.c nl_langinfo.c nomacros.c none.c rune.c \
  	runetype.c setinvalidrune.c setlocale.c setrunelocale.c table.c \
 -	tolower.c toupper.c utf2.c utf8.c
 +	tolower.c toupper.c utf2.c utf8.c gbk.c
  
  .if ${LIB} == "c"
  MAN+=	ctype.3 isalnum.3 isalpha.3 isascii.3 isblank.3 iscntrl.3 \
 --- lib/libc/locale/gbk.c.orig	Wed Apr 30 18:56:09 2003
 +++ lib/libc/locale/gbk.c	Wed Apr 30 18:53:19 2003
 @@ -0,0 +1,119 @@
 +/*-
 + * Copyright (c) 1993
 + *	The Regents of the University of California.  All rights reserved.
 + *
 + * This code is derived from software contributed to Berkeley by
 + * Paul Borman at Krystal Technologies.
 + *
 + * Redistribution and use in source and binary forms, with or without
 + * modification, are permitted provided that the following conditions
 + * are met:
 + * 1. Redistributions of source code must retain the above copyright
 + *    notice, this list of conditions and the following disclaimer.
 + * 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.
 + *
 + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 + * SUCH DAMAGE.
 + *
 + * $FreeBSD$
 + */
 +
 +#if defined(LIBC_SCCS) && !defined(lint)
 +static char sccsid[] = "@(#)gbk.c	8.1 (Berkeley) 6/4/93";
 +#endif /* LIBC_SCCS and not lint */
 +
 +#include <rune.h>
 +#include <stddef.h>
 +#include <stdio.h>
 +#include <stdlib.h>
 +#include <sys/types.h>
 +
 +rune_t	_GBK_sgetrune __P((const char *, size_t, char const **));
 +int	_GBK_sputrune __P((rune_t, char *, size_t, char **));
 +
 +int
 +_GBK_init(rl)
 +	_RuneLocale *rl;
 +{
 +	rl->sgetrune = _GBK_sgetrune;
 +	rl->sputrune = _GBK_sputrune;
 +	_CurrentRuneLocale = rl;
 +	__mb_cur_max = 2;
 +	return (0);
 +}
 +
 +static inline int
 +_gbk_check(c)
 +	u_int c;
 +{
 +	c &= 0xff;
 +	return ((c >= 0x80 && c <= 0xfe) ? 2 : 1);
 +}
 +
 +rune_t
 +_GBK_sgetrune(string, n, result)
 +	const char *string;
 +	size_t n;
 +	char const **result;
 +{
 +	rune_t rune = 0;
 +	int len;
 +
 +	if (n < 1 || (len = _gbk_check(*string)) > n) {
 +		if (result)
 +			*result = string;
 +		return (_INVALID_RUNE);
 +	}
 +	while (--len >= 0)
 +		rune = (rune << 8) | ((u_int)(*string++) & 0xff);
 +	if (result)
 +		*result = string;
 +	return rune;
 +}
 +
 +int
 +_GBK_sputrune(c, string, n, result)
 +	rune_t c;
 +	char *string, **result;
 +	size_t n;
 +{
 +	if (c & 0x8000) {
 +		if (n >= 2) {
 +			string[0] = (c >> 8) & 0xff;
 +			string[1] = c & 0xff;
 +			if (result)
 +				*result = string + 2;
 +			return (2);
 +		}
 +	}
 +	else {
 +		if (n >= 1) {
 +			*string = c & 0xff;
 +			if (result)
 +				*result = string + 1;
 +			return (1);
 +		}
 +	}
 +	if (result)
 +		*result = string;
 +	return (0);
 +	
 +}
 --- lib/libc/locale/setrunelocale.c.orig	Wed Apr 30 18:35:31 2003
 +++ lib/libc/locale/setrunelocale.c	Wed Apr 30 18:36:14 2003
 @@ -139,6 +139,8 @@
  		ret = _BIG5_init(rl);
  	else if (strcmp(rl->encoding, "MSKanji") == 0)
  		ret = _MSKanji_init(rl);
 +	else if (strcmp(rl->encoding, "GBK") == 0)
 +		ret = _GBK_init(rl);
  	else
  		ret = EFTYPE;
  	if (ret == 0) {


More information about the freebsd-bugs mailing list