Issue 4880: PyInt_FromSsize_t LONG_MIN and LONG_MAX typecasts needed (original) (raw)
This issue has been migrated to GitHub: https://github.com/python/cpython/issues/49130
classification
Title: | PyInt_FromSsize_t LONG_MIN and LONG_MAX typecasts needed | |
---|---|---|
Type: | Stage: | |
Components: | Versions: | Python 2.5 |
process
Status: | closed | Resolution: | works for me |
---|---|---|---|
Dependencies: | Superseder: | ||
Assigned To: | Nosy List: | lkcl, loewis, mark.dickinson | |
Priority: | normal | Keywords: |
Created on 2009-01-08 14:56 by lkcl, last changed 2022-04-11 14:56 by admin. This issue is now closed.
Messages (6) | ||
---|---|---|
msg79411 - (view) | Author: Luke Kenneth Casson Leighton (lkcl) | Date: 2009-01-08 14:56 |
there's probably a better way to do this (or a better reason), but LONG_MIN and LONG_MAX end up as the wrong constant types when compiling python2.5.2 under wine (don't ask...) PyObject * PyInt_FromSsize_t(Py_ssize_t ival) { if ((long)ival >= (long)LONG_MIN && (long)ival <= (long)LONG_MAX) { return PyInt_FromLong((long)ival); } return _PyLong_FromSsize_t(ival); } | ||
msg79418 - (view) | Author: Mark Dickinson (mark.dickinson) * ![]() |
Date: 2009-01-08 15:46 |
Interesting. How many of those casts are actually necessary to make things work? Have you figured out more precisely why this is failing? E.g., is it somehow that LONG_MIN ends up being an unsigned constant? It seems to me that a better fix would be to fix LONG_MIN and LONG_MAX somewhere in the configuration files; there are bound to be more uses of LONG_MIN and LONG_MAX in the source that are going to cause problems. P.S. Looking at your python-dev messages, does len([1, 2]) really return 1L? Not 2L? | ||
msg79422 - (view) | Author: Luke Kenneth Casson Leighton (lkcl) | Date: 2009-01-08 16:40 |
oh, duh - 2L not 1L yes you're right :) yeh i believe it's likely to be because in PC/pyconfig.h LONG_MAX is #defined to 7fffffff not 7fffffffL i'll double-check. you're right that would make life a looot easier. | ||
msg79424 - (view) | Author: Luke Kenneth Casson Leighton (lkcl) | Date: 2009-01-08 16:47 |
.... hmmm... noo, it's already #defined to 0x7fffffffL in both PC/pyconfig.h _and_ in /usr/include/wine/msvcrt/limits.h so .... this works (Include/pyports.h) #ifdef __WINE__ /* weird: you have to typecast 0x7fffffffL to long */ #undef LONG_MAX #undef LONG_MIN #define LONG_MAX ((long)0x7FFFFFFFL) #define LONG_MIN ((long)(-LONG_MAX-1)) #else #ifndef LONG_MAX #if SIZEOF_LONG == 4 #define LONG_MAX 0X7FFFFFFFL #elif SIZEOF_LONG == 8 #define LONG_MAX 0X7FFFFFFFFFFFFFFFL #else #error "could not set LONG_MAX in pyport.h" #endif #endif #ifndef LONG_MIN #define LONG_MIN (-LONG_MAX-1) #endif #endif /* __WINE__ */ | ||
msg79436 - (view) | Author: Martin v. Löwis (loewis) * ![]() |
Date: 2009-01-08 20:42 |
I think you should study the preprocessor output to find out what LONG_MAX really expands to, at the point where it is used. In any case, I'm tempted to close this as "works for me" - 0x7FFFFFFFL is definitely a long constant in all compilers I know of. | ||
msg81642 - (view) | Author: Mark Dickinson (mark.dickinson) * ![]() |
Date: 2009-02-11 13:47 |
It seems likely that this is a wine bug rather than a Python bug. |
History | |||
---|---|---|---|
Date | User | Action | Args |
2022-04-11 14:56:43 | admin | set | github: 49130 |
2009-02-11 13:47:54 | mark.dickinson | set | status: open -> closedresolution: works for memessages: + |
2009-01-08 20:42:03 | loewis | set | nosy: + loewismessages: + |
2009-01-08 16:47:55 | lkcl | set | messages: + |
2009-01-08 16:40:56 | lkcl | set | messages: + |
2009-01-08 15:46:22 | mark.dickinson | set | nosy: + mark.dickinsonmessages: + |
2009-01-08 14:56:28 | lkcl | create |