mirror of
https://github.com/python/cpython
synced 2024-09-16 03:39:58 +00:00
gh-90473: WASI requires proper open(2) flags (GH-93529)
This commit is contained in:
parent
9081bbd036
commit
4c71d22c4f
|
@ -463,7 +463,10 @@ def create_empty_file(filename):
|
|||
def open_dir_fd(path):
|
||||
"""Open a file descriptor to a directory."""
|
||||
assert os.path.isdir(path)
|
||||
dir_fd = os.open(path, os.O_RDONLY)
|
||||
flags = os.O_RDONLY
|
||||
if hasattr(os, "O_DIRECTORY"):
|
||||
flags |= os.O_DIRECTORY
|
||||
dir_fd = os.open(path, flags)
|
||||
try:
|
||||
yield dir_fd
|
||||
finally:
|
||||
|
|
|
@ -3993,7 +3993,7 @@ class PathTConverterTests(unittest.TestCase):
|
|||
('access', False, (os.F_OK,), None),
|
||||
('chflags', False, (0,), None),
|
||||
('lchflags', False, (0,), None),
|
||||
('open', False, (0,), getattr(os, 'close', None)),
|
||||
('open', False, (os.O_RDONLY,), getattr(os, 'close', None)),
|
||||
]
|
||||
|
||||
def test_path_t_converter(self):
|
||||
|
@ -4365,6 +4365,7 @@ def test_fd(self):
|
|||
st = os.stat(entry.name, dir_fd=fd, follow_symlinks=False)
|
||||
self.assertEqual(entry.stat(follow_symlinks=False), st)
|
||||
|
||||
@unittest.skipIf(support.is_wasi, "WASI maps '' to cwd")
|
||||
def test_empty_path(self):
|
||||
self.assertRaises(FileNotFoundError, os.scandir, '')
|
||||
|
||||
|
|
|
@ -235,6 +235,9 @@ ## WASI limitations and issues (WASI SDK 15.0)
|
|||
call read/write/accept on a file descriptor that is passed into the process.
|
||||
- ``socket.gethostname()`` and host name resolution APIs like
|
||||
``socket.gethostbyname()`` are not implemented and always fail.
|
||||
- ``open(2)`` checks flags more strictly. Caller must pass either
|
||||
``O_RDONLY``, ``O_RDWR``, or ``O_WDONLY`` to ``os.open``. Directory file
|
||||
descriptors must be created with flags ``O_RDONLY | O_DIRECTORY``.
|
||||
- ``chmod(2)`` is not available. It's not possible to modify file permissions,
|
||||
yet. A future version of WASI may provide a limited ``set_permissions`` API.
|
||||
- User/group related features like ``os.chown()``, ``os.getuid``, etc. are
|
||||
|
|
Loading…
Reference in a new issue