@@ -2013,15 +2013,52 @@ find_init_module(char *buf)
20132013
20142014static int init_builtin (char * ); /* Forward */
20152015
2016+ static PyObject *
2017+ load_builtin (char * name , char * pathname , int type )
2018+ {
2019+ PyObject * m , * modules ;
2020+ int err ;
2021+
2022+ if (pathname != NULL && pathname [0 ] != '\0' )
2023+ name = pathname ;
2024+
2025+ if (type == C_BUILTIN )
2026+ err = init_builtin (name );
2027+ else
2028+ err = PyImport_ImportFrozenModule (name );
2029+ if (err < 0 )
2030+ return NULL ;
2031+ if (err == 0 ) {
2032+ PyErr_Format (PyExc_ImportError ,
2033+ "Purported %s module %.200s not found" ,
2034+ type == C_BUILTIN ?
2035+ "builtin" : "frozen" ,
2036+ name );
2037+ return NULL ;
2038+ }
2039+
2040+ modules = PyImport_GetModuleDict ();
2041+ m = PyDict_GetItemString (modules , name );
2042+ if (m == NULL ) {
2043+ PyErr_Format (
2044+ PyExc_ImportError ,
2045+ "%s module %.200s not properly initialized" ,
2046+ type == C_BUILTIN ?
2047+ "builtin" : "frozen" ,
2048+ name );
2049+ return NULL ;
2050+ }
2051+ Py_INCREF (m );
2052+ return m ;
2053+ }
2054+
20162055/* Load an external module using the default search path and return
20172056 its module object WITH INCREMENTED REFERENCE COUNT */
20182057
20192058static PyObject *
20202059load_module (char * name , FILE * fp , char * pathname , int type , PyObject * loader )
20212060{
2022- PyObject * modules ;
20232061 PyObject * m ;
2024- int err ;
20252062
20262063 /* First check that there's an open file (if we need one) */
20272064 switch (type ) {
@@ -2057,34 +2094,7 @@ load_module(char *name, FILE *fp, char *pathname, int type, PyObject *loader)
20572094
20582095 case C_BUILTIN :
20592096 case PY_FROZEN :
2060- if (pathname != NULL && pathname [0 ] != '\0' )
2061- name = pathname ;
2062- if (type == C_BUILTIN )
2063- err = init_builtin (name );
2064- else
2065- err = PyImport_ImportFrozenModule (name );
2066- if (err < 0 )
2067- return NULL ;
2068- if (err == 0 ) {
2069- PyErr_Format (PyExc_ImportError ,
2070- "Purported %s module %.200s not found" ,
2071- type == C_BUILTIN ?
2072- "builtin" : "frozen" ,
2073- name );
2074- return NULL ;
2075- }
2076- modules = PyImport_GetModuleDict ();
2077- m = PyDict_GetItemString (modules , name );
2078- if (m == NULL ) {
2079- PyErr_Format (
2080- PyExc_ImportError ,
2081- "%s module %.200s not properly initialized" ,
2082- type == C_BUILTIN ?
2083- "builtin" : "frozen" ,
2084- name );
2085- return NULL ;
2086- }
2087- Py_INCREF (m );
2097+ m = load_builtin (name , pathname , type );
20882098 break ;
20892099
20902100 case IMP_HOOK : {
0 commit comments