[Python-checkins] r66865 - in python/branches/release26-maint: Lib/test/test_dbm.py Lib/test/test_platform.py Misc/NEWS Modules/posixmodule.c

hirokazu.yamamoto python-checkins at python.org
Thu Oct 9 20:06:58 CEST 2008


Author: hirokazu.yamamoto
Date: Thu Oct  9 20:06:58 2008
New Revision: 66865

Log:
Merged revisions 66809-66810,66835,66862-66863 via svnmerge from 
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r66809 | hirokazu.yamamoto | 2008-10-06 10:57:03 +0900 | 1 line
  
  Added the test for issue3762.
........
  r66810 | hirokazu.yamamoto | 2008-10-06 11:41:59 +0900 | 1 line
  
  More strict test. Consider the case sys.executable itself is symlink.
........
  r66835 | hirokazu.yamamoto | 2008-10-08 03:10:47 +0900 | 1 line
  
  more intensive test on dbm.
........
  r66862 | hirokazu.yamamoto | 2008-10-09 19:00:30 +0900 | 3 lines
  
  On windows, os.chdir given unicode was not working if GetCurrentDirectoryW
  returned a path longer than MAX_PATH. (But It's doubtful this code path is
  really executed because I cannot move to such directory on win2k)
........
  r66863 | hirokazu.yamamoto | 2008-10-09 19:11:21 +0900 | 1 line
  
  r66862 contained memory leak.
........


Modified:
   python/branches/release26-maint/   (props changed)
   python/branches/release26-maint/Lib/test/test_dbm.py
   python/branches/release26-maint/Lib/test/test_platform.py
   python/branches/release26-maint/Misc/NEWS
   python/branches/release26-maint/Modules/posixmodule.c

Modified: python/branches/release26-maint/Lib/test/test_dbm.py
==============================================================================
--- python/branches/release26-maint/Lib/test/test_dbm.py	(original)
+++ python/branches/release26-maint/Lib/test/test_dbm.py	Thu Oct  9 20:06:58 2008
@@ -1,9 +1,6 @@
 from test import test_support
 import unittest
-import os
-import random
 import dbm
-from dbm import error
 
 class DbmTestCase(unittest.TestCase):
 
@@ -18,11 +15,16 @@
 
     def test_keys(self):
         self.d = dbm.open(self.filename, 'c')
-        self.assert_(self.d.keys() == [])
-        self.d['a'] = 'b'
-        self.d['12345678910'] = '019237410982340912840198242'
-        self.d.keys()
-        self.assert_(self.d.has_key('a'))
+        self.assertEqual(self.d.keys(), [])
+        a = [('a', 'b'), ('12345678910', '019237410982340912840198242')]
+        for k, v in a:
+            self.d[k] = v
+        self.assertEqual(sorted(self.d.keys()), sorted(k for (k, v) in a))
+        for k, v in a:
+            self.assert_(k in self.d)
+            self.assertEqual(self.d[k], v)
+        self.assert_('xxx' not in self.d)
+        self.assertRaises(KeyError, lambda: self.d['xxx'])
         self.d.close()
 
     def test_modes(self):

Modified: python/branches/release26-maint/Lib/test/test_platform.py
==============================================================================
--- python/branches/release26-maint/Lib/test/test_platform.py	(original)
+++ python/branches/release26-maint/Lib/test/test_platform.py	Thu Oct  9 20:06:58 2008
@@ -2,6 +2,7 @@
 import os
 import unittest
 import platform
+import subprocess
 
 from test import test_support
 
@@ -9,6 +10,21 @@
     def test_architecture(self):
         res = platform.architecture()
 
+    if hasattr(os, "symlink"):
+        def test_architecture_via_symlink(self): # issue3762
+            def get(python):
+                cmd = [python, '-c',
+                    'import platform; print platform.architecture()']
+                p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
+                return p.communicate()
+            real = os.path.realpath(sys.executable)
+            link = os.path.abspath(test_support.TESTFN)
+            os.symlink(real, link)
+            try:
+                self.assertEqual(get(real), get(link))
+            finally:
+                os.remove(link)
+
     def test_machine(self):
         res = platform.machine()
 

Modified: python/branches/release26-maint/Misc/NEWS
==============================================================================
--- python/branches/release26-maint/Misc/NEWS	(original)
+++ python/branches/release26-maint/Misc/NEWS	Thu Oct  9 20:06:58 2008
@@ -12,6 +12,10 @@
 Core and Builtins
 -----------------
 
+- On windows, os.chdir given unicode was not working if GetCurrentDirectoryW
+  returned a path longer than MAX_PATH. (But It's doubtful this code path is
+  really executed because I cannot move to such directory on win2k)
+
 - Issue #4069: When set.remove(element) is used with a set element, the element
   is temporarily replaced with an equivalent frozenset.  But the eventual
   KeyError would always report the empty frozenset([]) as the missing key. Now

Modified: python/branches/release26-maint/Modules/posixmodule.c
==============================================================================
--- python/branches/release26-maint/Modules/posixmodule.c	(original)
+++ python/branches/release26-maint/Modules/posixmodule.c	Thu Oct  9 20:06:58 2008
@@ -726,11 +726,16 @@
 	if (!result)
 		return FALSE;
 	if (result > MAX_PATH+1) {
-		new_path = malloc(result);
+		new_path = malloc(result * sizeof(wchar_t));
 		if (!new_path) {
 			SetLastError(ERROR_OUTOFMEMORY);
 			return FALSE;
 		}
+		result = GetCurrentDirectoryW(result, new_path);
+		if (!result) {
+			free(new_path);
+			return FALSE;
+		}
 	}
 	if (wcsncmp(new_path, L"\\\\", 2) == 0 ||
 	    wcsncmp(new_path, L"//", 2) == 0)


More information about the Python-checkins mailing list