Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 3 Sep 2002 17:11:10 +1000 (EST)
From:      Bruce Evans <bde@zeta.org.au>
To:        Mike Barcroft <mike@FreeBSD.org>
Cc:        standards@FreeBSD.org
Subject:   Re: Conformance bugs in <ctype.h>, by way of <runetype.h>
Message-ID:  <20020903165059.Q6101-100000@gamplex.bde.org>
In-Reply-To: <20020902140549.E94253@espresso.q9media.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 2 Sep 2002, Mike Barcroft wrote:

> >From rev 1.5 of ctype.h:
> ...
> o TODO: fix conformance bugs brought by including <runetype.h>.
>
> I'd appreciate comments of the attached patch which fixes this issue
> and brings <ctype.h> up to conformance.

> ctype.diff
>
> o Fix namespace scope issues in <ctype.h> by using the relatively new
>   visibility primitives.
> o Implement _tolower() and _toupper() POSIX.1-2001 (XSI) macros in
>   <ctype.h>.
> o Make <runetype.h> pollutant-free so that it can safely be included
>   in <ctype.h>.
> o Add a typedef in <rune.h> to compensate for <runetype.h> being
>   pollutant-free.
>
> Index: ctype.h
> ===================================================================
> RCS file: /work/repo/src/include/ctype.h,v
> retrieving revision 1.22
> diff -u -r1.22 ctype.h
> --- ctype.h	21 Aug 2002 16:19:55 -0000	1.22
> +++ ctype.h	2 Sep 2002 18:07:04 -0000
> ...
> @@ -85,9 +81,15 @@
>  int	tolower(int);
>  int	toupper(int);
>
> -#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
> -int	digittoint(int);
> +#if __XSI_VISIBLE
> +int	_tolower(int);
> +int	_toupper(int);
>  int	isascii(int);
> +int	toascii(int);
> +#endif

It would be nice to not support mistakes like XSI.

> Index: runetype.h
> ===================================================================
> RCS file: /work/repo/src/include/runetype.h,v
> retrieving revision 1.7
> diff -u -r1.7 runetype.h
> --- runetype.h	21 Aug 2002 16:19:55 -0000	1.7
> +++ runetype.h	2 Sep 2002 17:18:18 -0000
> ...
> @@ -67,9 +50,9 @@
>   * The lower 8 bits of runetype[] contain the digit value of the rune.
>   */
>  typedef struct {
> -	rune_t		min;		/* First rune of the range */
> -	rune_t		max;		/* Last rune (inclusive) of the range */
> -	rune_t		map;		/* What first maps to in maps */
> +	__rune_t	min;		/* First rune of the range */
> +	__rune_t	max;		/* Last rune (inclusive) of the range */
> +	__rune_t	map;		/* What first maps to in maps */
>  	unsigned long	*types;		/* Array of types in range */
>  } _RuneEntry;
>
> ...

There is still a lot of pollution here: all the struct member names, which
don't even have a runetype-specific prefix (#define min runetype loses).

There doesn't seem to be any good way to fix this.  The inline functions in
ctype need to reference at least the runetype[] struct member.  Renaming
the struct members to have a prefix like __ru_ would be ugly and might
break documented runetype interfaces.  Most of the interfaces seem to be
private so this might not be a problem.

Bruce


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-standards" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020903165059.Q6101-100000>