Skip to content
Snippets Groups Projects
Commit 6f5ca248 authored by Jeremy Soller's avatar Jeremy Soller
Browse files

Merge branch 'master' into 'master'

A little bit more documentation

See merge request redox-os/redoxfs!38
parents 3ef85578 6126bfee
No related branches found
No related tags found
No related merge requests found
...@@ -21,7 +21,7 @@ impl Iterator<> for BlockIter { ...@@ -21,7 +21,7 @@ impl Iterator<> for BlockIter {
} }
} }
/// A disk extent /// A disk extent, [wikipedia](https://en.wikipedia.org/wiki/Extent_(file_systems))
#[derive(Copy, Clone, Debug, Default)] #[derive(Copy, Clone, Debug, Default)]
#[repr(packed)] #[repr(packed)]
pub struct Extent { pub struct Extent {
......
...@@ -43,6 +43,7 @@ impl<D: Disk> FileSystem<D> { ...@@ -43,6 +43,7 @@ impl<D: Disk> FileSystem<D> {
/// Create a file system on a disk, with reserved data at the beginning /// Create a file system on a disk, with reserved data at the beginning
/// Reserved data will be zero padded up to the nearest block /// Reserved data will be zero padded up to the nearest block
/// We need to pass ctime and ctime_nsec in order to initialize the unix timestamps
pub fn create_reserved(mut disk: D, reserved: &[u8], ctime: u64, ctime_nsec: u32) -> Result<Self> { pub fn create_reserved(mut disk: D, reserved: &[u8], ctime: u64, ctime_nsec: u32) -> Result<Self> {
let size = disk.size()?; let size = disk.size()?;
let block_offset = (reserved.len() as u64 + BLOCK_SIZE - 1)/BLOCK_SIZE; let block_offset = (reserved.len() as u64 + BLOCK_SIZE - 1)/BLOCK_SIZE;
...@@ -80,6 +81,7 @@ impl<D: Disk> FileSystem<D> { ...@@ -80,6 +81,7 @@ impl<D: Disk> FileSystem<D> {
} }
} }
/// Read at a certain spot in the disk, returning data into buffer
pub fn read_at(&mut self, block: u64, buffer: &mut [u8]) -> Result<usize> { pub fn read_at(&mut self, block: u64, buffer: &mut [u8]) -> Result<usize> {
self.disk.read_at(self.block + block, buffer) self.disk.read_at(self.block + block, buffer)
} }
......
...@@ -110,19 +110,26 @@ impl Node { ...@@ -110,19 +110,26 @@ impl Node {
self.mode & Node::MODE_TYPE == Node::MODE_SYMLINK self.mode & Node::MODE_TYPE == Node::MODE_SYMLINK
} }
/// Tests if UID is the owner of that file, only true when uid=0 or when the UID stored in metadata is equal to the UID you supply
pub fn owner(&self, uid: u32) -> bool { pub fn owner(&self, uid: u32) -> bool {
uid == 0 || self.uid == uid uid == 0 || self.uid == uid
} }
/// Tests if the current user has enough permissions to view the file, op is the operation,
/// like read and write, these modes are MODE_EXEC, MODE_READ, and MODE_WRITE
pub fn permission(&self, uid: u32, gid: u32, op: u16) -> bool { pub fn permission(&self, uid: u32, gid: u32, op: u16) -> bool {
let mut perm = self.mode & 0o7; let mut perm = self.mode & 0o7;
if self.uid == uid { if self.uid == uid {
// If self.mode is 101100110, >> 6 would be 000000101
// 0o7 is octal for 111, or, when expanded to 9 digits is 000000111
perm |= (self.mode >> 6) & 0o7; perm |= (self.mode >> 6) & 0o7;
// Since we erased the GID and OTHER bits when >>6'ing, |= will keep those bits in place.
} }
if self.gid == gid || gid == 0 { if self.gid == gid || gid == 0 {
perm |= (self.mode >> 3) & 0o7; perm |= (self.mode >> 3) & 0o7;
} }
if uid == 0 { if uid == 0 {
//set the `other` bits to 111
perm |= 0o7; perm |= 0o7;
} }
perm & op == op perm & op == op
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment