Correct arithmetic in access on Win32. Fixes #1513646.

This commit is contained in:
Martin v. Löwis 2006-07-02 18:44:00 +00:00
parent 762fbd3485
commit ee1e06d497
3 changed files with 18 additions and 1 deletions

View File

@ -11,6 +11,19 @@ from test import test_support
warnings.filterwarnings("ignore", "tempnam", RuntimeWarning, __name__)
warnings.filterwarnings("ignore", "tmpnam", RuntimeWarning, __name__)
# Tests creating TESTFN
class FileTests(unittest.TestCase):
def setUp(self):
if os.path.exists(test_support.TESTFN):
os.unlink(test_support.TESTFN)
tearDown = setUp
def test_access(self):
f = os.open(test_support.TESTFN, os.O_CREAT|os.O_RDWR)
os.close(f)
self.assert_(os.access(test_support.TESTFN, os.W_OK))
class TemporaryFileTests(unittest.TestCase):
def setUp(self):
self.files = []
@ -393,6 +406,7 @@ if sys.platform != 'win32':
def test_main():
test_support.run_unittest(
FileTests,
TemporaryFileTests,
StatAttributeTests,
EnvironTests,

View File

@ -52,6 +52,9 @@ Library
Extension Modules
-----------------
- Bug #1513646: os.access on Windows now correctly determines write
access, again.
- Bug #1512695: cPickle.loads could crash if it was interrupted with
a KeyboardInterrupt.

View File

@ -1402,7 +1402,7 @@ finish:
return PyBool_FromLong(0);
/* Access is possible if either write access wasn't requested, or
the file isn't read-only. */
return PyBool_FromLong(!(mode & 2) || !(attr && FILE_ATTRIBUTE_READONLY));
return PyBool_FromLong(!(mode & 2) || !(attr & FILE_ATTRIBUTE_READONLY));
#else
int res;
if (!PyArg_ParseTuple(args, "eti:access",