You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
2.3 KiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

//! C Interfaces for ucore
/// Abstract low-level file.
///
/// Match struct `inode` in ucore `kern/fs/vfs/inode.h`
#[repr(C)]
struct INode {
// TODO: full the struct
}
/// A buffer Rd/Wr status record
///
/// Match struct `iobuf` in ucore `kern/fs/iobuf.h`
#[repr(C)]
struct IoBuf {
/// the base addr of buffer (used for Rd/Wr)
base: *mut u8,
/// current Rd/Wr position in buffer, will have been incremented by the amount transferred
offset: i32,
/// the length of buffer (used for Rd/Wr)
len: u32,
/// current resident length need to Rd/Wr, will have been decremented by the amount transferred.
resident: u32,
}
/// Information about a file
///
/// Match struct `stat` in ucore `libs/stat.h`
#[repr(C)]
struct Stat {
/// protection mode and file type
mode: u32,
/// number of hard links
nlinks: u32,
/// number of blocks file is using
blocks: u32,
/// file size (bytes)
size: u32,
}
const S_IFMT : u32 = 070000; // mask for type of file
const S_IFREG: u32 = 010000; // ordinary regular file
const S_IFDIR: u32 = 020000; // directory
const S_IFLNK: u32 = 030000; // symbolic link
const S_IFCHR: u32 = 040000; // character device
const S_IFBLK: u32 = 050000; // block device
/// Abstract operations on a inode.
///
/// Match struct `inode_ops` in ucore `kern/fs/vfs/inode.h`
// TODO: Append docs from ucore
#[repr(C)]
struct INodeOps {
magic: u64,
open: extern fn(*mut INode, flags: u32) -> i32,
close: extern fn(*mut INode) -> i32,
read: extern fn(*mut INode, *mut IoBuf) -> i32,
write: extern fn(*mut INode, *mut IoBuf) -> i32,
fstat: extern fn(*mut INode, *mut Stat) -> i32,
fsync: extern fn(*mut INode) -> i32,
namefile: extern fn(*mut INode, *mut IoBuf) -> i32,
getdirentry: extern fn(*mut INode, *mut IoBuf) -> i32,
reclaim: extern fn(*mut INode) -> i32,
gettype: extern fn(*mut INode, type_store: *mut u32) -> i32,
tryseek: extern fn(*mut INode, pos: i32) -> i32,
truncate: extern fn(*mut INode, len: i32) -> i32,
create: extern fn(*mut INode, name: *const u8, excl: bool, inode_store: *mut *mut INode) -> i32,
lookup: extern fn(*mut INode, path: *mut u8, inode_store: *mut *mut INode) -> i32,
ioctl: extern fn(*mut INode, op: i32, data: *mut u8) -> i32,
}