[Python-checkins] r82905 - python/branches/import_unicode/Modules/zipimport.c

victor.stinner python-checkins at python.org
Wed Jul 14 22:38:21 CEST 2010


Author: victor.stinner
Date: Wed Jul 14 22:38:21 2010
New Revision: 82905

Log:
use an object to access zipimport cache

Modified:
   python/branches/import_unicode/Modules/zipimport.c

Modified: python/branches/import_unicode/Modules/zipimport.c
==============================================================================
--- python/branches/import_unicode/Modules/zipimport.c	(original)
+++ python/branches/import_unicode/Modules/zipimport.c	Wed Jul 14 22:38:21 2010
@@ -64,11 +64,14 @@
     PyObject *pathbytes;
     char *path, *p, *prefix, buf[MAXPATHLEN+2];
     size_t len;
+    PyObject *files;
+    PyObject *pathobj;
 
     if (!_PyArg_NoKeywords("zipimporter()", kwds))
         return -1;
 
-    if (!PyArg_ParseTuple(args, "O&:zipimporter", PyUnicode_FSConverter, &pathbytes))
+    if (!PyArg_ParseTuple(args, "O&:zipimporter",
+                          PyUnicode_FSConverter, &pathbytes))
         return -1;
 
     len = PyBytes_GET_SIZE(pathbytes);
@@ -117,31 +120,38 @@
         *p = '\0';
         prefix = p;
     }
-    if (path != NULL) {
-        PyObject *files;
-        files = PyDict_GetItemString(zip_directory_cache, path);
-        if (files == NULL) {
-            PyObject *bufobj;
-            bufobj = PyUnicode_DecodeFSDefault(buf);
-            if (bufobj == NULL)
-                return -1;
-            files = read_directory(bufobj);
-            Py_DECREF(bufobj);
-            if (files == NULL)
-                return -1;
-            if (PyDict_SetItemString(zip_directory_cache, path,
-                                     files) != 0)
-                return -1;
-        }
-        else
-            Py_INCREF(files);
-        self->files = files;
-    }
-    else {
+    if (path == NULL)
         PyErr_SetString(ZipImportError, "not a Zip file");
         return -1;
     }
 
+    pathobj = PyUnicode_DecodeFSDefault(path);
+    if (pathobj == NULL)
+        return -1;
+    files = PyDict_GetItem(zip_directory_cache, pathobj);
+    if (files == NULL) {
+        PyObject *bufobj;
+        bufobj = PyUnicode_DecodeFSDefault(buf);
+        if (bufobj == NULL) {
+            Py_DECREF(pathobj);
+            return -1;
+        }
+        files = read_directory(bufobj);
+        Py_DECREF(bufobj);
+        if (files == NULL) {
+            Py_DECREF(pathobj);
+            return -1;
+        }
+        if (PyDict_SetItem(zip_directory_cache, pathobj, files) != 0) {
+            Py_DECREF(pathobj);
+            return -1;
+        }
+    }
+    else
+        Py_INCREF(files);
+    Py_DECREF(pathobj);
+    self->files = files;
+
     if (prefix == NULL)
         prefix = "";
     else {


More information about the Python-checkins mailing list