Issue #18520: Add a new PyStructSequence_InitType2() function, same than

PyStructSequence_InitType() except that it has a return value (0 on success,
-1 on error).

 * PyStructSequence_InitType2() now raises MemoryError on memory allocation failure
 * Fix also some calls to PyDict_SetItemString(): handle error
This commit is contained in:
Victor Stinner 2013-07-22 22:24:54 +02:00
parent 2a545099f7
commit 1c8f059019
17 changed files with 117 additions and 54 deletions

View file

@ -1634,8 +1634,10 @@ _PySys_Init(void)
SET_SYS_FROM_STRING("int_info",
PyLong_GetInfo());
/* initialize hash_info */
if (Hash_InfoType.tp_name == 0)
PyStructSequence_InitType(&Hash_InfoType, &hash_info_desc);
if (Hash_InfoType.tp_name == NULL) {
if (PyStructSequence_InitType2(&Hash_InfoType, &hash_info_desc) < 0)
return NULL;
}
SET_SYS_FROM_STRING("hash_info",
get_hash_info());
SET_SYS_FROM_STRING("maxunicode",
@ -1676,8 +1678,11 @@ _PySys_Init(void)
}
/* version_info */
if (VersionInfoType.tp_name == 0)
PyStructSequence_InitType(&VersionInfoType, &version_info_desc);
if (VersionInfoType.tp_name == NULL) {
if (PyStructSequence_InitType2(&VersionInfoType,
&version_info_desc) < 0)
return NULL;
}
version_info = make_version_info();
SET_SYS_FROM_STRING("version_info", version_info);
/* prevent user from creating new instances */
@ -1688,8 +1693,10 @@ _PySys_Init(void)
SET_SYS_FROM_STRING("implementation", make_impl_info(version_info));
/* flags */
if (FlagsType.tp_name == 0)
PyStructSequence_InitType(&FlagsType, &flags_desc);
if (FlagsType.tp_name == 0) {
if (PyStructSequence_InitType2(&FlagsType, &flags_desc) < 0)
return NULL;
}
SET_SYS_FROM_STRING("flags", make_flags());
/* prevent user from creating new instances */
FlagsType.tp_init = NULL;
@ -1699,7 +1706,9 @@ _PySys_Init(void)
#if defined(MS_WINDOWS)
/* getwindowsversion */
if (WindowsVersionType.tp_name == 0)
PyStructSequence_InitType(&WindowsVersionType, &windows_version_desc);
if (PyStructSequence_InitType2(&WindowsVersionType,
&windows_version_desc) < 0)
return NULL;
/* prevent user from creating new instances */
WindowsVersionType.tp_init = NULL;
WindowsVersionType.tp_new = NULL;