@@ -1429,7 +1429,7 @@ get_sourcefile(char *file)
14291429static PyObject * load_module (char * , FILE * , char * , int , PyObject * );
14301430static struct filedescr * find_module (char * , char * , PyObject * ,
14311431 char * , size_t , FILE * * , PyObject * * );
1432- static struct _frozen * find_frozen (char * );
1432+ static struct _frozen * find_frozen (PyObject * );
14331433
14341434/* Load a package and return its module object WITH INCREMENTED
14351435 REFERENCE COUNT */
@@ -1617,6 +1617,8 @@ find_module(char *fullname, char *subname, PyObject *path, char *buf,
16171617 size_t saved_namelen ;
16181618 char * saved_buf = NULL ;
16191619#endif
1620+ PyObject * fullname_obj ;
1621+
16201622 if (p_loader != NULL )
16211623 * p_loader = NULL ;
16221624
@@ -1662,9 +1664,16 @@ find_module(char *fullname, char *subname, PyObject *path, char *buf,
16621664 Py_DECREF (meta_path );
16631665 }
16641666
1665- if (find_frozen (fullname ) != NULL ) {
1666- strcpy (buf , fullname );
1667- return & fd_frozen ;
1667+ if (fullname != NULL ) {
1668+ fullname_obj = PyUnicode_FromString (fullname );
1669+ if (fullname == NULL )
1670+ return NULL ;
1671+ if (find_frozen (fullname_obj ) != NULL ) {
1672+ Py_DECREF (fullname_obj );
1673+ strcpy (buf , fullname );
1674+ return & fd_frozen ;
1675+ }
1676+ Py_DECREF (fullname_obj );
16681677 }
16691678
16701679 if (path == NULL ) {
@@ -2226,37 +2235,37 @@ init_builtin(char *name)
22262235/* Frozen modules */
22272236
22282237static struct _frozen *
2229- find_frozen (char * name )
2238+ find_frozen (PyObject * name )
22302239{
22312240 struct _frozen * p ;
22322241
2233- if (! name )
2242+ if (name == NULL )
22342243 return NULL ;
22352244
22362245 for (p = PyImport_FrozenModules ; ; p ++ ) {
22372246 if (p -> name == NULL )
22382247 return NULL ;
2239- if (strcmp ( p -> name , name ) == 0 )
2248+ if (PyUnicode_CompareWithASCIIString ( name , p -> name ) == 0 )
22402249 break ;
22412250 }
22422251 return p ;
22432252}
22442253
22452254static PyObject *
2246- get_frozen_object (char * name )
2255+ get_frozen_object (PyObject * name )
22472256{
22482257 struct _frozen * p = find_frozen (name );
22492258 int size ;
22502259
22512260 if (p == NULL ) {
22522261 PyErr_Format (PyExc_ImportError ,
2253- "No such frozen object named %.200s " ,
2262+ "No such frozen object named %R " ,
22542263 name );
22552264 return NULL ;
22562265 }
22572266 if (p -> code == NULL ) {
22582267 PyErr_Format (PyExc_ImportError ,
2259- "Excluded frozen object named %.200s " ,
2268+ "Excluded frozen object named %R " ,
22602269 name );
22612270 return NULL ;
22622271 }
@@ -2267,14 +2276,14 @@ get_frozen_object(char *name)
22672276}
22682277
22692278static PyObject *
2270- is_frozen_package (char * name )
2279+ is_frozen_package (PyObject * name )
22712280{
22722281 struct _frozen * p = find_frozen (name );
22732282 int size ;
22742283
22752284 if (p == NULL ) {
22762285 PyErr_Format (PyExc_ImportError ,
2277- "No such frozen object named %.200s " ,
2286+ "No such frozen object named %R " ,
22782287 name );
22792288 return NULL ;
22802289 }
@@ -2294,19 +2303,20 @@ is_frozen_package(char *name)
22942303 This function is also used from frozenmain.c */
22952304
22962305int
2297- PyImport_ImportFrozenModule ( char * name )
2306+ PyImport_ImportFrozenModuleObject ( PyObject * name )
22982307{
2299- struct _frozen * p = find_frozen (name );
2300- PyObject * co ;
2301- PyObject * m ;
2308+ struct _frozen * p ;
2309+ PyObject * co , * m , * path ;
23022310 int ispackage ;
23032311 int size ;
23042312
2313+ p = find_frozen (name );
2314+
23052315 if (p == NULL )
23062316 return 0 ;
23072317 if (p -> code == NULL ) {
23082318 PyErr_Format (PyExc_ImportError ,
2309- "Excluded frozen object named %.200s " ,
2319+ "Excluded frozen object named %R " ,
23102320 name );
23112321 return -1 ;
23122322 }
@@ -2315,40 +2325,41 @@ PyImport_ImportFrozenModule(char *name)
23152325 if (ispackage )
23162326 size = - size ;
23172327 if (Py_VerboseFlag )
2318- PySys_WriteStderr ("import %s # frozen%s\n" ,
2328+ PySys_FormatStderr ("import %U # frozen%s\n" ,
23192329 name , ispackage ? " package" : "" );
23202330 co = PyMarshal_ReadObjectFromString ((char * )p -> code , size );
23212331 if (co == NULL )
23222332 return -1 ;
23232333 if (!PyCode_Check (co )) {
23242334 PyErr_Format (PyExc_TypeError ,
2325- "frozen object %.200s is not a code object" ,
2335+ "frozen object %R is not a code object" ,
23262336 name );
23272337 goto err_return ;
23282338 }
23292339 if (ispackage ) {
23302340 /* Set __path__ to the package name */
2331- PyObject * d , * s , * l ;
2341+ PyObject * d , * l ;
23322342 int err ;
2333- m = PyImport_AddModule (name );
2343+ m = PyImport_AddModuleObject (name );
23342344 if (m == NULL )
23352345 goto err_return ;
23362346 d = PyModule_GetDict (m );
2337- s = PyUnicode_InternFromString (name );
2338- if (s == NULL )
2339- goto err_return ;
23402347 l = PyList_New (1 );
23412348 if (l == NULL ) {
2342- Py_DECREF (s );
23432349 goto err_return ;
23442350 }
2345- PyList_SET_ITEM (l , 0 , s );
2351+ Py_INCREF (name );
2352+ PyList_SET_ITEM (l , 0 , name );
23462353 err = PyDict_SetItemString (d , "__path__" , l );
23472354 Py_DECREF (l );
23482355 if (err != 0 )
23492356 goto err_return ;
23502357 }
2351- m = PyImport_ExecCodeModuleEx (name , co , "<frozen>" );
2358+ path = PyUnicode_FromString ("<frozen>" );
2359+ if (path == NULL )
2360+ goto err_return ;
2361+ m = PyImport_ExecCodeModuleObject (name , co , path , NULL );
2362+ Py_DECREF (path );
23522363 if (m == NULL )
23532364 goto err_return ;
23542365 Py_DECREF (co );
@@ -2359,6 +2370,19 @@ PyImport_ImportFrozenModule(char *name)
23592370 return -1 ;
23602371}
23612372
2373+ int
2374+ PyImport_ImportFrozenModule (char * name )
2375+ {
2376+ PyObject * nameobj ;
2377+ int ret ;
2378+ nameobj = PyUnicode_InternFromString (name );
2379+ if (nameobj == NULL )
2380+ return -1 ;
2381+ ret = PyImport_ImportFrozenModuleObject (nameobj );
2382+ Py_DECREF (nameobj );
2383+ return ret ;
2384+ }
2385+
23622386
23632387/* Import a module, either built-in, frozen, or external, and return
23642388 its module object WITH INCREMENTED REFERENCE COUNT */
@@ -3282,39 +3306,39 @@ imp_init_builtin(PyObject *self, PyObject *args)
32823306static PyObject *
32833307imp_init_frozen (PyObject * self , PyObject * args )
32843308{
3285- char * name ;
3309+ PyObject * name ;
32863310 int ret ;
32873311 PyObject * m ;
3288- if (!PyArg_ParseTuple (args , "s :init_frozen" , & name ))
3312+ if (!PyArg_ParseTuple (args , "U :init_frozen" , & name ))
32893313 return NULL ;
3290- ret = PyImport_ImportFrozenModule (name );
3314+ ret = PyImport_ImportFrozenModuleObject (name );
32913315 if (ret < 0 )
32923316 return NULL ;
32933317 if (ret == 0 ) {
32943318 Py_INCREF (Py_None );
32953319 return Py_None ;
32963320 }
3297- m = PyImport_AddModule (name );
3321+ m = PyImport_AddModuleObject (name );
32983322 Py_XINCREF (m );
32993323 return m ;
33003324}
33013325
33023326static PyObject *
33033327imp_get_frozen_object (PyObject * self , PyObject * args )
33043328{
3305- char * name ;
3329+ PyObject * name ;
33063330
3307- if (!PyArg_ParseTuple (args , "s :get_frozen_object" , & name ))
3331+ if (!PyArg_ParseTuple (args , "U :get_frozen_object" , & name ))
33083332 return NULL ;
33093333 return get_frozen_object (name );
33103334}
33113335
33123336static PyObject *
33133337imp_is_frozen_package (PyObject * self , PyObject * args )
33143338{
3315- char * name ;
3339+ PyObject * name ;
33163340
3317- if (!PyArg_ParseTuple (args , "s :is_frozen_package" , & name ))
3341+ if (!PyArg_ParseTuple (args , "U :is_frozen_package" , & name ))
33183342 return NULL ;
33193343 return is_frozen_package (name );
33203344}
@@ -3331,9 +3355,9 @@ imp_is_builtin(PyObject *self, PyObject *args)
33313355static PyObject *
33323356imp_is_frozen (PyObject * self , PyObject * args )
33333357{
3334- char * name ;
3358+ PyObject * name ;
33353359 struct _frozen * p ;
3336- if (!PyArg_ParseTuple (args , "s :is_frozen" , & name ))
3360+ if (!PyArg_ParseTuple (args , "U :is_frozen" , & name ))
33373361 return NULL ;
33383362 p = find_frozen (name );
33393363 return PyBool_FromLong ((long ) (p == NULL ? 0 : p -> size ));
0 commit comments