[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Patch:] restore the native use of isdigit() instead of ap_isdigit() in httpd.



Hmmm. The isdigit man page from the Single Unix Specification on the Open Groups' web site (www.unix.org) declares isdigit as follows:

	#include <ctype.h>

	int isdigit(int c);

This documentation for the isdigit interface would appear to allow the parameter to be a char since chars can certainly be cast to ints without any loss of information.

I will say that arguing that one should pass unsigned char's to isdigit to ensure portability across even antique environments that do not adhere to the roughly ten year old Single Unix Specification makes a certain amount of sense. Arguing that one should not pass chars to isdigit because it violates isdigit's documented interface is the part that I'm having trouble with.

There is a caveat on the Open Group's man page which reads as follows:

The functionality described on this reference page is aligned with the ISO C standard. Any conflict between the requirements described here and the ISO C standard is unintentional. This volume of IEEE Std 1003.1-2001 defers to the ISO C standard.

I don't have a copy of the ISO C standard. Could someone who has access to the ISO C standard check to see how it defines isdigit?

-Danny

On 30-Mar-2006, at 12:50 PM, joerg_(_at_)_britannica_(_dot_)_bec_(_dot_)_de wrote:

On Thu, Mar 30, 2006 at 02:44:19PM -0500, Daniel Ouellet wrote:
What I did is to check how it was process by the macro in the
/include/ctype.h:

__CTYPE_INLINE int isdigit(int c)
{
return (c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)c] & _N));
}

The important point is that isdigit should not be called with an argment
of type char. As I said, it works on OpenBSD. It does not work on other
systems. isdigit is a documented interface, so it should be used
correctly, since someone might want to use it on a different system
later.


Joerg