copyfile.odin 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package darwin
  2. import "core:sys/posix"
  3. copyfile_state_t :: distinct rawptr
  4. copyfile_flags :: bit_set[enum {
  5. ACL,
  6. STAT,
  7. XATTR,
  8. DATA,
  9. RECURSIVE = 15,
  10. CHECK,
  11. EXCL,
  12. NOFOLLOW_SRC,
  13. NOFOLLOW_DST,
  14. MOVE,
  15. UNLINK,
  16. PACK,
  17. UNPACK,
  18. CLONE,
  19. CLONE_FORCE,
  20. RUN_IN_PLACE,
  21. DATA_SPARSE,
  22. PRESERVE_DST_TRACKED,
  23. VERBOSE = 30,
  24. }; u32]
  25. COPYFILE_SECURITY :: copyfile_flags{.STAT, .ACL}
  26. COPYFILE_METADATA :: COPYFILE_SECURITY + copyfile_flags{.XATTR}
  27. COPYFILE_ALL :: COPYFILE_METADATA + copyfile_flags{.DATA}
  28. COPYFILE_NOFOLLOW :: copyfile_flags{.NOFOLLOW_SRC, .NOFOLLOW_DST}
  29. copyfile_state_flag :: enum u32 {
  30. SRC_FD = 1,
  31. SRC_FILENAME,
  32. DST_FD,
  33. DST_FILENAME,
  34. QUARANTINE,
  35. STATUS_CB,
  36. STATUS_CTX,
  37. COPIED,
  38. XATTRNAME,
  39. WAS_CLONED,
  40. SRC_BSIZE,
  41. DST_BSIZE,
  42. BSIZE,
  43. FORBID_CROSS_MOUNT,
  44. NOCPROTECT,
  45. PRESERVE_SUID,
  46. RECURSIVE_SRC_FTSENT,
  47. FORBID_DST_EXISTING_SYMLINKS,
  48. }
  49. foreign system {
  50. copyfile :: proc(from, to: cstring, state: copyfile_state_t, flags: copyfile_flags) -> i32 ---
  51. fcopyfile :: proc(from, to: posix.FD, state: copyfile_state_t, flags: copyfile_flags) -> i32 ---
  52. copyfile_state_alloc :: proc() -> copyfile_state_t ---
  53. copyfile_state_free :: proc(state: copyfile_state_t) -> posix.result ---
  54. copyfile_state_get :: proc(state: copyfile_state_t, flag: copyfile_state_flag, dst: rawptr) -> posix.result ---
  55. copyfile_state_set :: proc(state: copyfile_state_t, flag: copyfile_state_flag, src: rawptr) -> posix.result ---
  56. }