diff --git a/Misc/NEWS b/Misc/NEWS index 990f4d6c92f..90e3cc188c5 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,9 @@ What's New in Python 3.3.1 Core and Builtins ----------------- +- Issue #15965: Explicitly cast AT_FDCWD as (int). Required on Solaris 10 + (which defines AT_FDCWD as 0xffd19553), harmless on other platforms. + - Issue #15926: Fix crash after multiple reinitializations of the interpreter. - Issue #15895: Fix FILE pointer leak in one error branch of diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 54f6cd2b22c..e0efebfe1b0 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -414,7 +414,14 @@ win32_warn_bytes_api() #ifdef AT_FDCWD -#define DEFAULT_DIR_FD AT_FDCWD +/* + * Why the (int) cast? Solaris 10 defines AT_FDCWD as 0xffd19553 (-3041965); + * without the int cast, the value gets interpreted as uint (4291925331), + * which doesn't play nicely with all the initializer lines in this file that + * look like this: + * int dir_fd = DEFAULT_DIR_FD; + */ +#define DEFAULT_DIR_FD (int)AT_FDCWD #else #define DEFAULT_DIR_FD (-100) #endif