[Top][All Lists]

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

Re: source(builtin) and read(2)

From: Eric Blake
Subject: Re: source(builtin) and read(2)
Date: Fri, 23 Mar 2007 15:08:01 -0600
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv: Gecko/20070221 Thunderbird/ Mnenhy/

Hash: SHA1

According to Matthew Woehlke on 3/23/2007 2:40 PM:
>> SSIZE_MAX is guaranteed to be the maximum value that fits in ssize_t.
>> Again, if your ssize_t is smaller than 32 bits, your platform has other
>> issues.  Just because POSIX allows ssize_t to be as small as 16 bits
>> doesn't mean many modern platforms do that.
> Hmm... well then I guess this is broken:
> /usr/include/limits.h:#define SSIZE_MAX        53248    /* max single
> I/O size, 52K       */

Which platform is this?  Yes, it is horribly broken; it's not even one
less than a power of two, which means it is an outright violation of this:
    Maximum value of an object of type ssize_t.
    Minimum Acceptable Value: {_POSIX_SSIZE_MAX}

> The man page here says:
> If the value of nbytes is greater than SSIZE_MAX,
> the read() function returns -1 and sets errno to
> ...and trust me, it ain't lying. This broke at least gawk and gzip, and
> even the Linux man page seems to strongly indicate that you should pay
> attention to SSIZE_MAX when calling read().

Except that usually SSIZE_MAX is one-half of SIZE_MAX, which is usually
the same size as pointers.  On Linux, it is relatively rare to try to read
more than 2 gigabytes in a single read() call.  You usually run into other
platform limitations before it is possible to exceed the SSIZE_MAX limitation.

- --
Don't work too hard, make some time for fun as well!

Eric Blake             address@hidden
Version: GnuPG v1.4.5 (Cygwin)
Comment: Public key at home.comcast.net/~ericblake/eblake.gpg
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org


reply via email to

[Prev in Thread] Current Thread [Next in Thread]