[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
RE: nonstandard assumptions in the code
> -----Original Message-----
> From: Hallvard B Furuseth [mailto:h.b.furuseth@usit.uio.no]
> Kurt D. Zeilenga writes:
> >At 11:01 AM 5/30/2003, Hallvard B Furuseth wrote:
> >>
> >> Here are the nonstandard assumptions I have found.
> >> (...)
>
>
> >> * no padding bits in 'unsigned int'
> >> (required by back-bdb/dbcache.c:bdb_db_hash() - don't know why)
> >> (...)
> > These should be fixed.
>
> Howard, this is your code, from when you fixed ITS#1726. Something
> about endianness, perhaps? If not, we can use this function body,
> roughly from my original patch. I have dropped the ugly if-test for
> whether or not memcpy can be used, since I doubt the code is
> that time-
> critical.
>
> {
> u_int32_t i, ret = 0;
>
> if ( length > sizeof(u_int32_t) )
> length = sizeof(u_int32_t);
>
> for( i = 0; i < length; i++ )
> ret = (ret << 8) + ((const unsigned char *)bytes)[i];
> return ret;
> }
I guess that's OK. Endianness shouldn't really be a problem here since
it's a hash, we don't care about the particular sort order.
>
> >> * can cast function pointers to 'void *' and back
> >> (at least the threading stuff)
K&R 2nd Edition (ANSI C) p.120 "Any pointer can be cast to void * and back
again without loss of information."
> Another non-ANSI thing: LBER_OPT_ON and LDAP_OPT_ON are #defined as
> ((void*)1). There is no guarantee that this is != NULL (the *_OPT_OFF
> options). I'll install this fix unless someone protests:
K&R 2nd Edition p.102 - NULL is zero, by definition. Also stated again
in section 6.2.2.3 of the C90 spec.
-- Howard Chu
Chief Architect, Symas Corp. Director, Highland Sun
http://www.symas.com http://highlandsun.com/hyc
Symas: Premier OpenSource Development and Support