sizeof(long) on x86_64 is 8 bytes, things break
libogg is using long for nearly all bitwise operations and sometimes with 32bit
types without a cast. this brakes some functions which imply that bits outside
of 32 bit are cleared.
for example on x86_64 (amd64),
from cvs_nightly,
bitwise.c, function oggpackB_read :
unsigned long ret;
..
ret= b->ptr[0]<<(24+b->endbit);
if endbit is zero and the highest bit of ptr[0] is set, the value of ptr[0] is
shifted, converted to signed int, and sign extended to 64 bits before stored in
the unsigned variable ret.
this brakes programs using these libogg functions.