Page MenuHomeFreeBSD

Add file_open(): the underlying system call of openat().
ClosedPublic

Authored by ed on Jul 29 2015, 1:33 PM.
Tags
None
Referenced Files
Unknown Object (File)
Feb 24 2024, 3:58 AM
Unknown Object (File)
Dec 20 2023, 12:30 AM
Unknown Object (File)
Dec 6 2023, 9:27 PM
Unknown Object (File)
Sep 18 2023, 2:37 PM
Unknown Object (File)
Aug 13 2023, 6:41 AM
Unknown Object (File)
Aug 2 2023, 6:35 PM
Unknown Object (File)
Dec 31 2022, 5:34 PM
Unknown Object (File)
Dec 26 2022, 6:20 PM
Subscribers

Details

Summary

CloudABI purely operates on file descriptor rights (CAP_*). File
descriptor access modes (O_ACCMODE) are emulated on top of rights.

Instead of accepting the traditional flags argument, file_open() copies
in an fdstat_t object that contains the initial rights the descriptor
should have, but also file descriptor flags that should persist after
opening (APPEND, NONBLOCK, *SYNC). Only flags that don't persist (EXCL,
TRUNC, CREAT, DIRECTORY) are passed in as an argument.

file_open() first converts the rights, the persistent flags and the
non-persistent flags to fflags. It then calls into vn_open(). If
successful, it installs the file descriptor with the requested
rights, trimming off rights that don't apply to the type of
the file that has been opened.

Unlike kern_openat(), this function does not support /dev/fd/*. I can't
think of a reason why we need to support this for CloudABI.

Test Plan

This implementation passes the cloudlibc test suite:
https://github.com/NuxiNL/cloudlibc/blob/master/src/libc/fcntl/openat_test.c

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

ed retitled this revision from to Add file_open(): the underlying system call of openat()..
ed updated this object.
ed edited the test plan for this revision. (Show Details)
ed added reviewers: mjg, pjd, jonathan.
This revision was automatically updated to reflect the committed changes.