[Python-checkins] r81171 - in python/branches/release31-maint: Modules/posixmodule.c

victor.stinner python-checkins at python.org
Fri May 14 18:39:10 CEST 2010


Author: victor.stinner
Date: Fri May 14 18:39:10 2010
New Revision: 81171

Log:
Merged revisions 81170 via svnmerge from 
svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r81170 | victor.stinner | 2010-05-14 18:35:39 +0200 (ven., 14 mai 2010) | 6 lines
  
  posix_listdir(), posix_readlink(): avoid temporary PyBytes object
  
  Use directly PyUnicode_DecodeFSDefaultAndSize() instead of
  PyBytes_FromStringAndSize() + PyUnicode_FromEncodedObject() if the argument is
  unicode.
........


Modified:
   python/branches/release31-maint/   (props changed)
   python/branches/release31-maint/Modules/posixmodule.c

Modified: python/branches/release31-maint/Modules/posixmodule.c
==============================================================================
--- python/branches/release31-maint/Modules/posixmodule.c	(original)
+++ python/branches/release31-maint/Modules/posixmodule.c	Fri May 14 18:39:10 2010
@@ -2515,33 +2515,17 @@
             (NAMLEN(ep) == 1 ||
              (ep->d_name[1] == '.' && NAMLEN(ep) == 2)))
             continue;
-        v = PyBytes_FromStringAndSize(ep->d_name, NAMLEN(ep));
+        if (arg_is_unicode)
+            v = PyUnicode_DecodeFSDefaultAndSize(ep->d_name, NAMLEN(ep));
+        else
+            v = PyBytes_FromStringAndSize(ep->d_name, NAMLEN(ep));
         if (v == NULL) {
-            Py_DECREF(d);
-            d = NULL;
+            Py_CLEAR(d);
             break;
         }
-        if (arg_is_unicode) {
-            PyObject *w;
-
-            w = PyUnicode_FromEncodedObject(v,
-                                            Py_FileSystemDefaultEncoding,
-                                            "surrogateescape");
-            Py_DECREF(v);
-            if (w != NULL)
-                v = w;
-            else {
-                /* Encoding failed to decode ASCII bytes.
-                   Raise exception. */
-                Py_DECREF(d);
-                d = NULL;
-                break;
-            }
-        }
         if (PyList_Append(d, v) != 0) {
             Py_DECREF(v);
-            Py_DECREF(d);
-            d = NULL;
+            Py_CLEAR(d);
             break;
         }
         Py_DECREF(v);
@@ -4676,22 +4660,10 @@
         return posix_error_with_allocated_filename(opath);
 
     release_bytes(opath);
-    v = PyBytes_FromStringAndSize(buf, n);
-    if (arg_is_unicode) {
-        PyObject *w;
-
-        w = PyUnicode_FromEncodedObject(v,
-                                        Py_FileSystemDefaultEncoding,
-                                        "surrogateescape");
-        if (w != NULL) {
-            Py_DECREF(v);
-            v = w;
-        }
-        else {
-            v = NULL;
-        }
-    }
-    return v;
+    if (arg_is_unicode)
+        return PyUnicode_DecodeFSDefaultAndSize(buf, n);
+    else
+        return PyBytes_FromStringAndSize(buf, n);
 }
 #endif /* HAVE_READLINK */
 


More information about the Python-checkins mailing list