On Mon, Sep 13, 2004 at 12:09:20AM -0500, William A. Rowe, Jr. wrote:
> At 05:05 PM 9/12/2004, you wrote:
> >-AP_DECLARE(long) ap_get_client_block(request_rec *r, char *buffer, apr_size_t 
> >bufsiz);
> >+AP_DECLARE(apr_ssize_t) ap_get_client_block(request_rec *r, char *buffer, 
> >apr_size_t bufsiz);
> >
> >Don't know why long was used here, but it causes a warning
> >for Windows IA64 build since long is 32 bits. I'm wondering
> >however if there are any other 64 bit platforms that also have
> >32 bit longs that have ignored this warning. Hopefully not
> >and therefore this would be safe for backport to 2.0. Anyone
> >have information to the contrary?
> 
> On (most/all?) unixes - sizeof(long) == sizeof(void*).

Yes, AFAIK all contemporary unices are LP32, ILP32 (most common),
or LP64 ABIs.  Standard and very predictable and largely compatible
(with the exception of (long double) which is implemented by some
vendors as IEEE Quad and others as IEEE Double-Extended.)

The Open Group has a nice paper out on the subject:
  http://www.opengroup.org/public/tech/aspen/lp64_wp.htm
and compares LP64 to other 64-bit models, including ILP64
and LLP64, the one which Win64 follows.

> On Win64, we have sizeof(long) < sizeof(void*).  That's the
> discrepancy you are observing, and why it wasn't recognized.

The WINE dev list had this to contribute, including some GCC compiler
switches to help ease the pain:
  http://www.mail-archive.com/[EMAIL PROTECTED]/msg14882.html
Thread begins here:
  http://www.mail-archive.com/[EMAIL PROTECTED]/msg14810.html

Cheers,
Glenn

Reply via email to