constants.rs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. #![allow(unused)]
  2. use bitflags::bitflags;
  3. pub const EOK: usize = 0;
  4. #[allow(non_camel_case_types)]
  5. pub type ext4_lblk_t = u32;
  6. #[allow(non_camel_case_types)]
  7. pub type ext4_fsblk_t = u64;
  8. pub const EXT4_INODE_FLAG_EXTENTS: usize = 0x00080000; /* Inode uses extents */
  9. pub const EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE: u16 = 32;
  10. pub const EXT4_MAX_BLOCK_GROUP_DESCRIPTOR_SIZE: u16 = 64;
  11. pub const EXT4_CRC32_INIT: u32 = 0xFFFFFFFF;
  12. pub const EXT4_EXTENT_MAGIC: u16 = 0xF30A;
  13. pub const EXT_INIT_MAX_LEN: u16 = 32768;
  14. pub const EXT_UNWRITTEN_MAX_LEN: u16 = 65535;
  15. pub const EXT4_GOOD_OLD_INODE_SIZE: u16 = 128;
  16. pub const EXT4_INODE_MODE_FIFO: usize = 0x1000;
  17. pub const EXT4_INODE_MODE_CHARDEV: usize = 0x2000;
  18. pub const EXT4_INODE_MODE_DIRECTORY: usize = 0x4000;
  19. pub const EXT4_INODE_MODE_BLOCKDEV: usize = 0x6000;
  20. pub const EXT4_INODE_MODE_FILE: usize = 0x8000;
  21. pub const EXT4_INODE_MODE_SOFTLINK: usize = 0xA000;
  22. pub const EXT4_INODE_MODE_SOCKET: usize = 0xC000;
  23. pub const EXT4_INODE_MODE_TYPE_MASK: u16 = 0xF000;
  24. pub const EXT_MAX_BLOCKS: ext4_lblk_t = core::u32::MAX;
  25. /// Maximum bytes in a path
  26. pub const PATH_MAX: usize = 4096;
  27. /// Maximum bytes in a file name
  28. pub const NAME_MAX: usize = 255;
  29. /// The upper limit for resolving symbolic links
  30. pub const SYMLINKS_MAX: usize = 40;
  31. #[allow(non_camel_case_types)]
  32. #[derive(Debug, PartialEq)]
  33. pub enum LibcOpenFlags {
  34. O_ACCMODE,
  35. O_RDONLY,
  36. O_WRONLY,
  37. O_RDWR,
  38. O_CREAT,
  39. O_EXCL,
  40. O_NOCTTY,
  41. O_TRUNC,
  42. O_APPEND,
  43. O_NONBLOCK,
  44. O_SYNC,
  45. O_ASYNC,
  46. O_LARGEFILE,
  47. O_DIRECTORY,
  48. O_NOFOLLOW,
  49. O_CLOEXEC,
  50. O_DIRECT,
  51. O_NOATIME,
  52. O_PATH,
  53. O_DSYNC,
  54. }
  55. pub const O_ACCMODE: u32 = 0o0003;
  56. pub const O_RDONLY: u32 = 0o00;
  57. pub const O_WRONLY: u32 = 0o01;
  58. pub const O_RDWR: u32 = 0o02;
  59. pub const O_CREAT: u32 = 0o0100;
  60. pub const O_EXCL: u32 = 0o0200;
  61. pub const O_NOCTTY: u32 = 0o0400;
  62. pub const O_TRUNC: u32 = 0o01000;
  63. pub const O_APPEND: u32 = 0o02000;
  64. pub const O_NONBLOCK: u32 = 0o04000;
  65. pub const O_SYNC: u32 = 0o4010000;
  66. pub const O_ASYNC: u32 = 0o020000;
  67. pub const O_LARGEFILE: u32 = 0o0100000;
  68. pub const O_DIRECTORY: u32 = 0o0200000;
  69. pub const O_NOFOLLOW: u32 = 0o0400000;
  70. pub const O_CLOEXEC: u32 = 0o2000000;
  71. pub const O_DIRECT: u32 = 0o040000;
  72. pub const O_NOATIME: u32 = 0o1000000;
  73. pub const O_PATH: u32 = 0o10000000;
  74. pub const O_DSYNC: u32 = 0o010000;
  75. pub const EPERM: usize = 1; /* Operation not permitted */
  76. pub const ENOENT: usize = 2; /* No such file or directory */
  77. pub const ESRCH: usize = 3; /* No such process */
  78. pub const EINTR: usize = 4; /* Interrupted system call */
  79. pub const EIO: usize = 5; /* I/O error */
  80. pub const ENXIO: usize = 6; /* No such device or address */
  81. pub const E2BIG: usize = 7; /* Argument list too long */
  82. pub const ENOEXEC: usize = 8; /* Exec format error */
  83. pub const EBADF: usize = 9; /* Bad file number */
  84. pub const ECHILD: usize = 10; /* No child processes */
  85. pub const EAGAIN: usize = 11; /* Try again */
  86. pub const ENOMEM: usize = 12; /* Out of memory */
  87. pub const EACCES: usize = 13; /* Permission denied */
  88. pub const EFAULT: usize = 14; /* Bad address */
  89. pub const ENOTBLK: usize = 15; /* Block device required */
  90. pub const EBUSY: usize = 16; /* Device or resource busy */
  91. pub const EEXIST: usize = 17; /* File exists */
  92. pub const EXDEV: usize = 18; /* Cross-device link */
  93. pub const ENODEV: usize = 19; /* No such device */
  94. pub const ENOTDIR: usize = 20; /* Not a directory */
  95. pub const EISDIR: usize = 21; /* Is a directory */
  96. pub const EINVAL: usize = 22; /* Invalid argument */
  97. pub const ENFILE: usize = 23; /* File table overflow */
  98. pub const EMFILE: usize = 24; /* Too many open files */
  99. pub const ENOTTY: usize = 25; /* Not a typewriter */
  100. pub const ETXTBSY: usize = 26; /* Text file busy */
  101. pub const EFBIG: usize = 27; /* File too large */
  102. pub const ENOSPC: usize = 28; /* No space left on device */
  103. pub const ESPIPE: usize = 29; /* Illegal seek */
  104. pub const EROFS: usize = 30; /* Read-only file system */
  105. pub const EMLINK: usize = 31; /* Too many links */
  106. pub const EPIPE: usize = 32; /* Broken pipe */
  107. pub const EDOM: usize = 33; /* Math argument out of domain of func */
  108. pub const ERANGE: usize = 34; /* Math result not representable */
  109. bitflags! {
  110. pub struct OpenFlag: u32 {
  111. // 以下是open/fcntl的一些常量,和C语言的值相同
  112. const O_ACCMODE = 0o0003;
  113. const O_RDONLY = 0o00;
  114. const O_WRONLY = 0o01;
  115. const O_RDWR = 0o02;
  116. const O_CREAT = 0o0100;
  117. const O_EXCL = 0o0200;
  118. const O_NOCTTY = 0o0400;
  119. const O_TRUNC = 0o01000;
  120. const O_APPEND = 0o02000;
  121. const O_NONBLOCK = 0o04000;
  122. const O_NDELAY = Self::O_NONBLOCK.bits();
  123. const O_SYNC = 0o4010000;
  124. const O_FSYNC = Self::O_SYNC.bits();
  125. const O_ASYNC = 0o020000;
  126. const O_LARGEFILE = 0o0100000;
  127. const O_DIRECTORY = 0o0200000;
  128. const O_NOFOLLOW = 0o0400000;
  129. const O_CLOEXEC = 0o2000000;
  130. const O_DIRECT = 0o040000;
  131. const O_NOATIME = 0o1000000;
  132. const O_PATH = 0o10000000;
  133. const O_DSYNC = 0o010000;
  134. const O_TMPFILE = 0o20000000 | Self::O_DIRECTORY.bits();
  135. }
  136. }
  137. bitflags! {
  138. #[derive(Debug, PartialEq, Eq)]
  139. pub struct InodeMode: u16 {
  140. const S_IFSOCK = 0xC000;
  141. const S_IFLNK = 0xA000;
  142. const S_IFREG = 0x8000;
  143. const S_IFBLK = 0x6000;
  144. const S_IFDIR = 0x4000;
  145. const S_IFCHR = 0x2000;
  146. const S_IFIFO = 0x1000;
  147. }
  148. }
  149. pub const BASE_OFFSET: usize = 1024;
  150. pub const BLOCK_SIZE: usize = 4096;