mirror of https://github.com/python/cpython
Repair portability of sign extension when reading signed ints on boxes
where sizeof(long)==8. This *was* broken on boxes where signed right shifts didn't sign-extend, but not elsewhere. Unfortunately, apart from the Cray T3E I don't know of such a box, and Guido has so far refused to buy me any Cray machines for home Python testing <wink>. More immediately interesting would be if someone could please test this on *any* sizeof(long)==8 box, to make sure I didn't break it.
This commit is contained in:
parent
9cec8fba06
commit
f0e717bdb1
|
@ -653,11 +653,9 @@ bu_int(const char *p, const formatdef *f)
|
|||
do {
|
||||
x = (x<<8) | (*p++ & 0xFF);
|
||||
} while (--i > 0);
|
||||
i = 8*(sizeof(long) - f->size);
|
||||
if (i) {
|
||||
x <<= i;
|
||||
x >>= i;
|
||||
}
|
||||
/* Extend the sign bit. */
|
||||
if (SIZEOF_LONG > f->size)
|
||||
x |= -(x & (1L << (8*f->size - 1)));
|
||||
return PyInt_FromLong(x);
|
||||
}
|
||||
|
||||
|
@ -767,11 +765,9 @@ lu_int(const char *p, const formatdef *f)
|
|||
do {
|
||||
x = (x<<8) | (p[--i] & 0xFF);
|
||||
} while (i > 0);
|
||||
i = 8*(sizeof(long) - f->size);
|
||||
if (i) {
|
||||
x <<= i;
|
||||
x >>= i;
|
||||
}
|
||||
/* Extend the sign bit. */
|
||||
if (SIZEOF_LONG > f->size)
|
||||
x |= -(x & (1L << (8*f->size - 1)));
|
||||
return PyInt_FromLong(x);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue