]> granicus.if.org Git - python/commitdiff
[Bug #802128 continued] Modify mode depending on the process umask.
authorAndrew M. Kuchling <amk@amk.ca>
Fri, 22 Dec 2006 15:16:58 +0000 (15:16 +0000)
committerAndrew M. Kuchling <amk@amk.ca>
Fri, 22 Dec 2006 15:16:58 +0000 (15:16 +0000)
Is there really no other way to read the umask than to set it?

Hope this works on Windows...

Lib/dumbdbm.py
Lib/test/test_dumbdbm.py

index 9e9ffcc117faaaff82cca7ed623faec59a7518f2..2c7931d18475a648b67fd343007b29671e192efc 100644 (file)
@@ -236,4 +236,15 @@ def open(file, flag=None, mode=0666):
 
     """
     # flag argument is currently ignored
+
+    # Modify mode depending on the umask
+    try:
+        um = _os.umask(0)
+        _os.umask(um)
+    except AttributeError:
+        pass
+    else:
+        # Turn off any bits that are set in the umask
+        mode = mode & (~um)
+        
     return _Database(file, mode)
index a1e34da34b777724374014d1b5559ee6a8611333..e5dfe1d7e78ff57e9665756f23175ecc306eed82 100644 (file)
@@ -40,17 +40,21 @@ class DumbDBMTestCase(unittest.TestCase):
 
     def test_dumbdbm_creation_mode(self):
         # On platforms without chmod, don't do anything.
-        if not hasattr(os, 'chmod'):
+        if not (hasattr(os, 'chmod') and hasattr(os, 'umask')):
             return
 
-        f = dumbdbm.open(_fname, 'c', 0632)
-        f.close()
-
+        try:
+            old_umask = os.umask(0002)
+            f = dumbdbm.open(_fname, 'c', 0637)
+            f.close()
+        finally:
+            os.umask(old_umask)
+            
         import stat
         st = os.stat(_fname + '.dat')
-        self.assertEqual(stat.S_IMODE(st.st_mode), 0632)
+        self.assertEqual(stat.S_IMODE(st.st_mode), 0635)
         st = os.stat(_fname + '.dir')
-        self.assertEqual(stat.S_IMODE(st.st_mode), 0632)
+        self.assertEqual(stat.S_IMODE(st.st_mode), 0635)
         
     def test_close_twice(self):
         f = dumbdbm.open(_fname)