123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- #![allow(unused)]
- use bitflags::bitflags;
- pub const EOK: usize = 0;
- #[allow(non_camel_case_types)]
- pub type ext4_lblk_t = u32;
- #[allow(non_camel_case_types)]
- pub type ext4_fsblk_t = u64;
- pub const EXT4_INODE_FLAG_EXTENTS: usize = 0x00080000; /* Inode uses extents */
- pub const EXT4_MIN_BLOCK_GROUP_DESCRIPTOR_SIZE: u16 = 32;
- pub const EXT4_MAX_BLOCK_GROUP_DESCRIPTOR_SIZE: u16 = 64;
- pub const EXT4_CRC32_INIT: u32 = 0xFFFFFFFF;
- pub const EXT4_EXTENT_MAGIC: u16 = 0xF30A;
- pub const EXT_INIT_MAX_LEN: u16 = 32768;
- pub const EXT_UNWRITTEN_MAX_LEN: u16 = 65535;
- pub const EXT4_GOOD_OLD_INODE_SIZE: u16 = 128;
- pub const EXT4_INODE_MODE_FIFO: usize = 0x1000;
- pub const EXT4_INODE_MODE_CHARDEV: usize = 0x2000;
- pub const EXT4_INODE_MODE_DIRECTORY: usize = 0x4000;
- pub const EXT4_INODE_MODE_BLOCKDEV: usize = 0x6000;
- pub const EXT4_INODE_MODE_FILE: usize = 0x8000;
- pub const EXT4_INODE_MODE_SOFTLINK: usize = 0xA000;
- pub const EXT4_INODE_MODE_SOCKET: usize = 0xC000;
- pub const EXT4_INODE_MODE_TYPE_MASK: u16 = 0xF000;
- pub const EXT_MAX_BLOCKS: ext4_lblk_t = core::u32::MAX;
- /// Maximum bytes in a path
- pub const PATH_MAX: usize = 4096;
- /// Maximum bytes in a file name
- pub const NAME_MAX: usize = 255;
- /// The upper limit for resolving symbolic links
- pub const SYMLINKS_MAX: usize = 40;
- #[allow(non_camel_case_types)]
- #[derive(Debug, PartialEq)]
- pub enum LibcOpenFlags {
- O_ACCMODE,
- O_RDONLY,
- O_WRONLY,
- O_RDWR,
- O_CREAT,
- O_EXCL,
- O_NOCTTY,
- O_TRUNC,
- O_APPEND,
- O_NONBLOCK,
- O_SYNC,
- O_ASYNC,
- O_LARGEFILE,
- O_DIRECTORY,
- O_NOFOLLOW,
- O_CLOEXEC,
- O_DIRECT,
- O_NOATIME,
- O_PATH,
- O_DSYNC,
- }
- pub const O_ACCMODE: u32 = 0o0003;
- pub const O_RDONLY: u32 = 0o00;
- pub const O_WRONLY: u32 = 0o01;
- pub const O_RDWR: u32 = 0o02;
- pub const O_CREAT: u32 = 0o0100;
- pub const O_EXCL: u32 = 0o0200;
- pub const O_NOCTTY: u32 = 0o0400;
- pub const O_TRUNC: u32 = 0o01000;
- pub const O_APPEND: u32 = 0o02000;
- pub const O_NONBLOCK: u32 = 0o04000;
- pub const O_SYNC: u32 = 0o4010000;
- pub const O_ASYNC: u32 = 0o020000;
- pub const O_LARGEFILE: u32 = 0o0100000;
- pub const O_DIRECTORY: u32 = 0o0200000;
- pub const O_NOFOLLOW: u32 = 0o0400000;
- pub const O_CLOEXEC: u32 = 0o2000000;
- pub const O_DIRECT: u32 = 0o040000;
- pub const O_NOATIME: u32 = 0o1000000;
- pub const O_PATH: u32 = 0o10000000;
- pub const O_DSYNC: u32 = 0o010000;
- pub const EPERM: usize = 1; /* Operation not permitted */
- pub const ENOENT: usize = 2; /* No such file or directory */
- pub const ESRCH: usize = 3; /* No such process */
- pub const EINTR: usize = 4; /* Interrupted system call */
- pub const EIO: usize = 5; /* I/O error */
- pub const ENXIO: usize = 6; /* No such device or address */
- pub const E2BIG: usize = 7; /* Argument list too long */
- pub const ENOEXEC: usize = 8; /* Exec format error */
- pub const EBADF: usize = 9; /* Bad file number */
- pub const ECHILD: usize = 10; /* No child processes */
- pub const EAGAIN: usize = 11; /* Try again */
- pub const ENOMEM: usize = 12; /* Out of memory */
- pub const EACCES: usize = 13; /* Permission denied */
- pub const EFAULT: usize = 14; /* Bad address */
- pub const ENOTBLK: usize = 15; /* Block device required */
- pub const EBUSY: usize = 16; /* Device or resource busy */
- pub const EEXIST: usize = 17; /* File exists */
- pub const EXDEV: usize = 18; /* Cross-device link */
- pub const ENODEV: usize = 19; /* No such device */
- pub const ENOTDIR: usize = 20; /* Not a directory */
- pub const EISDIR: usize = 21; /* Is a directory */
- pub const EINVAL: usize = 22; /* Invalid argument */
- pub const ENFILE: usize = 23; /* File table overflow */
- pub const EMFILE: usize = 24; /* Too many open files */
- pub const ENOTTY: usize = 25; /* Not a typewriter */
- pub const ETXTBSY: usize = 26; /* Text file busy */
- pub const EFBIG: usize = 27; /* File too large */
- pub const ENOSPC: usize = 28; /* No space left on device */
- pub const ESPIPE: usize = 29; /* Illegal seek */
- pub const EROFS: usize = 30; /* Read-only file system */
- pub const EMLINK: usize = 31; /* Too many links */
- pub const EPIPE: usize = 32; /* Broken pipe */
- pub const EDOM: usize = 33; /* Math argument out of domain of func */
- pub const ERANGE: usize = 34; /* Math result not representable */
- bitflags! {
- pub struct OpenFlag: u32 {
- // 以下是open/fcntl的一些常量,和C语言的值相同
- const O_ACCMODE = 0o0003;
- const O_RDONLY = 0o00;
- const O_WRONLY = 0o01;
- const O_RDWR = 0o02;
- const O_CREAT = 0o0100;
- const O_EXCL = 0o0200;
- const O_NOCTTY = 0o0400;
- const O_TRUNC = 0o01000;
- const O_APPEND = 0o02000;
- const O_NONBLOCK = 0o04000;
- const O_NDELAY = Self::O_NONBLOCK.bits();
- const O_SYNC = 0o4010000;
- const O_FSYNC = Self::O_SYNC.bits();
- const O_ASYNC = 0o020000;
- const O_LARGEFILE = 0o0100000;
- const O_DIRECTORY = 0o0200000;
- const O_NOFOLLOW = 0o0400000;
- const O_CLOEXEC = 0o2000000;
- const O_DIRECT = 0o040000;
- const O_NOATIME = 0o1000000;
- const O_PATH = 0o10000000;
- const O_DSYNC = 0o010000;
- const O_TMPFILE = 0o20000000 | Self::O_DIRECTORY.bits();
- }
- }
- bitflags! {
- #[derive(Debug, PartialEq, Eq)]
- pub struct InodeMode: u16 {
- const S_IFSOCK = 0xC000;
- const S_IFLNK = 0xA000;
- const S_IFREG = 0x8000;
- const S_IFBLK = 0x6000;
- const S_IFDIR = 0x4000;
- const S_IFCHR = 0x2000;
- const S_IFIFO = 0x1000;
- }
- }
- pub const BASE_OFFSET: usize = 1024;
- pub const BLOCK_SIZE: usize = 4096;
|