-
Notifications
You must be signed in to change notification settings - Fork 109
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
FileHelpers: Add FileDescriptor.read(filling buffer:) #84
base: main
Are you sure you want to change the base?
Changes from all commits
c7cba01
1740da9
b60b0fa
440fda2
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -158,14 +158,23 @@ extension FileDescriptor { | |
into buffer: UnsafeMutableRawBufferPointer, | ||
retryOnInterrupt: Bool = true | ||
) throws -> Int { | ||
try _read(into: buffer, retryOnInterrupt: retryOnInterrupt).get() | ||
try _readNoThrow(into: buffer, retryOnInterrupt: retryOnInterrupt).get() | ||
} | ||
|
||
// NOTE: This function (mistakenly marked as throws) is vestigial but remains to preserve ABI. | ||
@usableFromInline | ||
internal func _read( | ||
into buffer: UnsafeMutableRawBufferPointer, | ||
retryOnInterrupt: Bool | ||
) throws -> Result<Int, Errno> { | ||
_readNoThrow(into: buffer, retryOnInterrupt: retryOnInterrupt) | ||
} | ||
|
||
@usableFromInline | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This needs availability, right @lorentey ? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Unfortunately yes, and on ABI stable platforms, Given the importance of this particular entry point, I think it's worth considering marking the new non-throwing variant Otherwise we'll need to mess with I think it's okay to land this without resolving the availability mess -- ABI stable builds aren't possible to do within this repo, and I wouldn't want to force Simon to have to deal with a tricky problem based on partial info and no tooling. It's tricky enough to get right when we have the benefit of the ABI checker and a working build system. (Unless he really really wants to do it, of course!) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
😅 sounds like I might be opening a can of worms here. It sounds like merging this PR without addressing the ABI issue might be the quickest solution. After merging though, I'm happy to collaborate on how to please the ABI checker, but I confess this isn't something I've done before. |
||
internal func _readNoThrow( | ||
into buffer: UnsafeMutableRawBufferPointer, | ||
retryOnInterrupt: Bool | ||
) -> Result<Int, Errno> { | ||
valueOrErrno(retryOnInterrupt: retryOnInterrupt) { | ||
system_read(self.rawValue, buffer.baseAddress, buffer.count) | ||
} | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If we want to make this function opaque, then it'll need to come with availability, which means that the
read(filling:)
methods will need to have it too.@milseman Is there a good reason
writeAll
is implemented using an opaque function?