open-modes.lisp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. (in-package :hurd)
  2. (defconstant +honored-open-modes+ '(:append :async :fsync :nonblock))
  3. (defconstant +honored-get-modes+ (append +honored-open-modes+
  4. '(:write :exec :read)))
  5. (defcfun ("io_set_all_openmodes" %io-set-all-openmodes)
  6. err
  7. (file port)
  8. (newbits open-flags))
  9. (defun io-set-all-openmodes (file modes)
  10. "Reset 'file' open mode to 'modes'."
  11. (declare (type fixnum file)
  12. (type list modes))
  13. (select-error
  14. (%io-set-all-openmodes file
  15. (only-flags modes
  16. +honored-open-modes+))))
  17. (defcfun ("io_get_openmodes" %io-get-openmodes)
  18. err
  19. (file port)
  20. (bits :pointer))
  21. (defun io-get-openmodes (file)
  22. "Return 'file' open modes."
  23. (declare (type fixnum file))
  24. (with-foreign-pointer (bits (foreign-type-size 'open-flags))
  25. (select-error (%io-get-openmodes file bits)
  26. (only-flags (mem-ref bits 'open-flags)
  27. +honored-get-modes+))))
  28. (defcfun ("io_set_some_openmodes" %io-set-some-openmodes)
  29. err
  30. (file port)
  31. (bits open-flags))
  32. (defun io-set-some-openmodes (file bits)
  33. "Add 'bits' to 'file' open modes."
  34. (declare (type fixnum file)
  35. (type list bits))
  36. (select-error (%io-set-some-openmodes file bits)))
  37. (defcfun ("io_clear_some_openmodes" %io-clear-some-openmodes)
  38. err
  39. (file port)
  40. (bits open-flags))
  41. (defun io-clear-some-openmodes (file bits)
  42. "Remove 'bits' flags from 'file' open modes."
  43. (declare (type fixnum file)
  44. (type list bits))
  45. (select-error
  46. (%io-clear-some-openmodes file bits)))