This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author lukemewburn
Recipients lukemewburn
Date 2007-09-06.03:32:32
SpamBayes Score 0.0116764
Marked as misclassified No
Message-id <1189049554.49.0.320613302462.issue1114@psf.upfronthosting.co.za>
In-reply-to
Content
Attempting to use curses attributes with python 2.3.5 on AIX (64bit
powerpc) doesn't work, and occasionally results in exceptions being raised.

_cursesmodule.c assumes that attr_t is a `long' and uses the "l"
decoding of PyArg_ParseTuple() to read values from python to C.  On
platforms where sizeof(int) == sizeof(long), this isn't a problem. 
However, on LP64, especially big-endian LP64, this results in the wrong
value being stored in the target address.

My solution is to use ParseTuple("l") into a variable with an explicit
type of 'long', and then assign that to the attr_t variable that the
underlying curses(3) functions are called with.

(I don't know if there's a different convention for dealing with reading
numbers from python into underlying C types where the C type size isn't
consistently an `int' or a `long', other that reading into an explicit
int/long and then assigning/casting to the final type)

The code in question doesn't appear to have changed much between python
2.3.5 and the svn trunk (as at 20070906), and my patch for the former
applied fairly cleanly to my checkout of the latter.  I've attached a
diff from the svn checkout.
Files
File name Uploaded
curses-attr_t-long.diff lukemewburn, 2007-09-06.03:32:32
History
Date User Action Args
2007-09-06 03:32:35lukemewburnsetspambayes_score: 0.0116764 -> 0.0116764
recipients: + lukemewburn
2007-09-06 03:32:34lukemewburnsetspambayes_score: 0.0116764 -> 0.0116764
messageid: <1189049554.49.0.320613302462.issue1114@psf.upfronthosting.co.za>
2007-09-06 03:32:34lukemewburnlinkissue1114 messages
2007-09-06 03:32:32lukemewburncreate