bug-gnulib
[Top][All Lists]
Advanced

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

RE: source(builtin) and read(2)


From: Schwarz, Konrad
Subject: RE: source(builtin) and read(2)
Date: Wed, 4 Apr 2007 08:29:34 +0200

> -----Original Message-----
> From: Paul Eggert [mailto:address@hidden 
> "Schwarz, Konrad" <address@hidden> writes:
> 
> > The argument that since ptrdiff_t is intended to represent the 
> > difference of pointers makes it somehow unsuitable to represent the 
> > result of read()/write() is missing the point: on any useful ABI, 
> > ptrdiff_t can represent the size of any object, can 
> represent 0, and 
> > can represent -1, which is what read() and cousins require.
> 
> That's true nowadays, but in the old days there may have been 
> a point to distinguishing between ptrdiff_t and ssize_t.  I 
> wasn't there, but I imagine that the original point of 
> ptrdiff_t was that it could be wider than size_t.  Consider 
> the case of a machine with 16-bit addresses, 32-bit 
> registers, and where objects can be larger than
> 2**15 bytes.  (The Motorola 68000 in 16-bit address mode comes to
> mind.)  In such a machine size_t (and therefore ssize_t) is 
> 16 bits, and but it's useful to make ptrdiff_t 32 bits.
> 
> These days the distinction isn't all that relevant, because 
> it's not so useful to have objects that are between 2**31 and 
> 2**32 bytes in size.  So it would make sense now to require 
> that ssize_t and ptrdiff_t must be the same width.  I don't 
> know of any modern counterexamples.
> 

Sorry, you seem to have missed my point: even in the "old days", i.e.,
in cases where sizeof (ptrdiff_t) > sizeof (size_t), it makes sense to
define the return value of read() to have type ptrdiff_t, since this
ensures that all objects (that sizeof is valid for) can be read in a
single operation.  Otherwise, technically, a check that the size of the
object is less than SSIZE_MAX bytes is required.  What is the
justification for making the return value of read() have type ssize_t?

Regards,

Konrad




reply via email to

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