incorrect enum warning?
Louis A. Mamakos
louie at TransSys.COM
Sat May 3 05:30:00 PDT 2003
> On Thu, May 01, 2003 at 04:51:40PM +0200, Dag-Erling Smorgrav wrote:
> > Why does the following code in OpenPAM headers:
> >
> > /*
> > * XSSO 5.4
> > */
> > enum {
> > PAM_SILENT = 0x80000000,
> > PAM_DISALLOW_NULL_AUTHTOK = 0x1,
> > PAM_ESTABLISH_CRED = 0x1,
> > PAM_DELETE_CRED = 0x2,
> > PAM_REINITIALIZE_CRED = 0x4,
> > PAM_REFRESH_CRED = 0x8,
> > PAM_PRELIM_CHECK = 0x1,
> > PAM_UPDATE_AUTHTOK = 0x2,
> > PAM_CHANGE_EXPIRED_AUTHTOK = 0x4
> > };
> >
> > cause the following warning when compiled with CSTD=c99:
> >
> > /usr/src/contrib/openpam/include/security/pam_constants.h:100: warning: ISO C restricts enumerator values to range of `int'
> >
> > when 0x80000000 is clearly within the range of 'int' on all platforms
> > we support?
>
> Guessing:
> C does not specify one's complement or two's complement representation
> of integers. On a one's complement 32-bit platform, 0x80000000 is -0
> (negative zero), which cannot be an `int'.
That's incorrect; on a 32-bit 1's complement CPU, 0xffffffff is -0. You're
thinking of the signed magnitude representation.
louie
>
More information about the freebsd-hackers
mailing list