Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 5 Apr 2001 21:10:48 -0700 (PDT)
From:      Matt Dillon <dillon@earth.backplane.com>
To:        "T. William Wells" <bill@twwells.com>
Cc:        freebsd-bugs@freebsd.org
Subject:   Re: ntpd patch
Message-ID:  <200104060410.f364AmX37732@earth.backplane.com>
References:   <E14lLSx-000Ei4-00@twwells.com>

next in thread | previous in thread | raw e-mail | index | archive | help
    Ummm.. I think both ways are 'correct'.  First of all, there is 
    nothing wrong type-casting a signed char into an unsigned char.
    I really doubt any FreeBSD utility would actually run on a 1's
    complement machine anyway, so there is no particular reason to
    try to support it, and gcc will have no problem optimizing
    (unsigned char)*ptr verses *(unsigned char *)ptr... in fact,
    there is a very good chance that both would produce exactly the
    same code as a result, even without using any optimization flags.
    Casts are one of the easiest optimizations a C compiler can make.

						-Matt

:The correct code for dealing with a plain char pointer is:
:
:	isspace(*(unsigned char *)ptr);
:
:1) Though the defined type may, in fact, be a character, we are
:   treating it as an unsigned character and this code makes that
:   explicit.
:
:2) This code works on ones complement machines; (unsigned
:   char)*ptr does not.
:
:3) This code has a better chance of generating decent code when
:   optimization is turned off. (unsigned char)*ptr has an implicit
:   conversion to int, then the explicit conversion to unsigned
:   char, followed by an implicit conversion to unsigned int.
:   *(unsigned char *)ptr has only the implicit conversion to an
:   unsigned int.


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




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