[Python-checkins] r82670 - python/branches/import_unicode/Python/import.c

victor.stinner python-checkins at python.org
Fri Jul 9 01:32:20 CEST 2010


Author: victor.stinner
Date: Fri Jul  9 01:32:20 2010
New Revision: 82670

Log:
load_package() path is an object

instead of a char*

Modified:
   python/branches/import_unicode/Python/import.c

Modified: python/branches/import_unicode/Python/import.c
==============================================================================
--- python/branches/import_unicode/Python/import.c	(original)
+++ python/branches/import_unicode/Python/import.c	Fri Jul  9 01:32:20 2010
@@ -1381,7 +1381,7 @@
    REFERENCE COUNT */
 
 static PyObject *
-load_package(char *name, char *pathname)
+load_package(char *name, PyObject *pathobj)
 {
     PyObject *m, *d;
     PyObject *file = NULL;
@@ -1390,6 +1390,10 @@
     char buf[MAXPATHLEN+1];
     FILE *fp = NULL;
     struct filedescr *fdp;
+    char *pathname;
+
+    /* FIXME: don't use _PyUnicode_AsString */
+    pathname = _PyUnicode_AsString(pathobj);
 
     m = PyImport_AddModule(name);
     if (m == NULL)
@@ -2087,9 +2091,14 @@
     }
 #endif
 
-    case PKG_DIRECTORY:
-        m = load_package(name, pathname);
+    case PKG_DIRECTORY: {
+        PyObject *pathobj = PyUnicode_DecodeFSDefault(pathname);
+        if (pathobj == NULL)
+            return NULL;
+        m = load_package(name, pathobj);
+        Py_DECREF(pathobj);
         break;
+    }
 
     case C_BUILTIN:
     case PY_FROZEN:
@@ -3455,14 +3464,11 @@
 imp_load_package(PyObject *self, PyObject *args)
 {
     char *name;
-    char *pathname;
-    PyObject * ret;
-    if (!PyArg_ParseTuple(args, "ses:load_package",
-                          &name, Py_FileSystemDefaultEncoding, &pathname))
+    PyObject *pathname;
+    if (!PyArg_ParseTuple(args, "sU:load_package",
+                          &name, &pathname))
         return NULL;
-    ret = load_package(name, pathname);
-    PyMem_Free(pathname);
-    return ret;
+    return load_package(name, pathname);
 }
 
 static PyObject *


More information about the Python-checkins mailing list