rawfile.rs 544 B

12345678910111213141516171819202122232425262728
  1. use syscall;
  2. use core::ops::Deref;
  3. pub struct RawFile(usize);
  4. impl RawFile {
  5. pub fn open<T: AsRef<[u8]>>(path: T, flags: usize) -> syscall::Result<RawFile> {
  6. syscall::open(path, flags).map(RawFile)
  7. }
  8. pub fn dup(&self, buf: &[u8]) -> syscall::Result<RawFile> {
  9. syscall::dup(self.0, buf).map(RawFile)
  10. }
  11. }
  12. impl Drop for RawFile {
  13. fn drop(&mut self) {
  14. let _ = syscall::close(self.0);
  15. }
  16. }
  17. impl Deref for RawFile {
  18. type Target = usize;
  19. fn deref(&self) -> &usize {
  20. &self.0
  21. }
  22. }