cvs commit: src/lib/libc/sys tls.2

Matthew Dillon dillon at apollo.backplane.com
Mon Mar 21 11:37:56 PST 2005


:
:On Mon, 21 Mar 2005 11:15:32 -0800 (PST)
:Matthew Dillon <dillon at xxxxxxxxxxxxxxxxxxxx> wrote:
:
:>     Grumble (Matt goes off in a corner and mumbles about stupid standards
:>     which use unsigned ints because some bozo wanted to write 2.1GB of data
:>     in one go, when they really ought to just use normal ints).
:
:Why ought they do that?
:
:(or: why would one ever want a *negative* infosize?!)
:
:-Chris

    It's not that, it's the same issue with sizeof() returning unsigned
    when it really just ought to return an int.  Unsigned quantities change
    the way expressions in code are handled in ways that are not always
    apparent.  For example, if you are doing a delta calculation you can't
    just do the calculation and check to see if the result is negative,
    instead you have to do a range check before you do the calculation. 
    Things like that.  Negative numbers are also very useful as a means of
    representing out of band data or conditions.  EOF == -1 is a good example.
    Another is the handling of an optional argument.  If 0 is an allowed
    value then you can initialize an option to -1 to indicate that it has
    not been issued.  so, e.g. an optional 'int size_opt' argument, instead
    of 'int size; int size_opt_is_valid;'.  But with size_t you then have
    to cast it to an unsigned.  It just makes life unnecessarily difficult
    when 99.9999% of the calls to all these routines never need to specify
    huge blocks.

    In the case of a memory block, I suppose 'long' would be a better choice
    then 'int', but I really hate the way the hidden unsignedness of size_t
    and sizeof() has infiltrated the standards.

					-Matt
					Matthew Dillon 
					<dillon at xxxxxxxxxxxxx>





More information about the Commits mailing list