On Fri, Sep 02, 2005 at 12:24:05PM -0500, Steven Pritchard wrote:
I'm trying to build a package for Data::UUID. Something,
possibly the
from_string() function, apparently isn't 64-bit clean. ("make test"
fails on x86_64 but works fine on i386.) Unfortunately, I can't see
an obvious problem. Well, I can't figure out what's going on in the
code really either... :-)
Anyway, if there's anyone on this list that might be able to help me
figure this out, I'd really appreciate it. The author doesn't seem to
be terribly responsive.
Not very responsive at all. This same bug looks to have been reported
at
rt.cpan.org on Jan 4, 2005 without response.
I took a quick look at the code. These lines in UUID.h appear to be the
problem:
typedef unsigned long unsigned32;
typedef unsigned short unsigned16;
typedef unsigned char unsigned8;
typedef unsigned char byte;
typedef unsigned long long unsigned64_t;
typedef unsigned64_t uuid_time_t;
I can't readily verify this right now, since I don't have access to an
x86_64 box, but I suspect that sizeof(long) is 4 on x86 and 8 on x86_64.
This would change the size of uuid_t and throw off the pointer
arithmetic done in from_string().
The program could probably be patched fairly easily with some #ifdefs to
handle the different architectures, but that's a pretty fundamental
change to be making in a distribution patch.
--
Chris Grau <chris(a)chrisgrau.com>