diff --git a/mount/cache/mod.rs b/mount/cache/mod.rs index 3df653b21d..ec59e72db0 100644 --- a/mount/cache/mod.rs +++ b/mount/cache/mod.rs @@ -51,7 +51,7 @@ impl Disk for Cache { } if failed { - try!(self.inner.read_at(block, buffer)); + self.inner.read_at(block, buffer)?; read = 0; for i in 0..(buffer.len() + 511)/512 { @@ -73,7 +73,7 @@ impl Disk for Cache { fn write_at(&mut self, block: u64, buffer: &[u8]) -> Result { // println!("Cache write at {}", block); - try!(self.inner.write_at(block, buffer)); + self.inner.write_at(block, buffer)?; let mut written = 0; for i in 0..(buffer.len() + 511)/512 { diff --git a/mount/redox/resource.rs b/mount/redox/resource.rs index bd28e4df5f..adcb51cfcb 100644 --- a/mount/redox/resource.rs +++ b/mount/redox/resource.rs @@ -88,7 +88,7 @@ impl Resource for DirResource { } fn stat(&self, stat: &mut Stat, fs: &mut FileSystem) -> Result { - let node = try!(fs.node(self.block)); + let node = fs.node(self.block)?; *stat = Stat { st_dev: 0, // TODO @@ -96,7 +96,7 @@ impl Resource for DirResource { st_mode: node.1.mode, st_uid: node.1.uid, st_gid: node.1.gid, - st_size: try!(fs.node_len(self.block)), + st_size: fs.node_len(self.block)?, ..Default::default() }; @@ -142,7 +142,7 @@ impl Resource for FileResource { fn read(&mut self, buf: &mut [u8], fs: &mut FileSystem) -> Result { if self.flags & O_ACCMODE == O_RDWR || self.flags & O_ACCMODE == O_RDONLY { - let count = try!(fs.read_node(self.block, self.seek, buf)); + let count = fs.read_node(self.block, self.seek, buf)?; self.seek += count as u64; Ok(count) } else { @@ -152,7 +152,7 @@ impl Resource for FileResource { fn write(&mut self, buf: &[u8], fs: &mut FileSystem) -> Result { if self.flags & O_ACCMODE == O_RDWR || self.flags & O_ACCMODE == O_WRONLY { - let count = try!(fs.write_node(self.block, self.seek, buf)); + let count = fs.write_node(self.block, self.seek, buf)?; self.seek += count as u64; Ok(count) } else { @@ -161,7 +161,7 @@ impl Resource for FileResource { } fn seek(&mut self, offset: usize, whence: usize, fs: &mut FileSystem) -> Result { - let size = try!(fs.node_len(self.block)); + let size = fs.node_len(self.block)?; self.seek = match whence { SEEK_SET => max(0, min(size as i64, offset as i64)) as u64, @@ -197,14 +197,14 @@ impl Resource for FileResource { } fn stat(&self, stat: &mut Stat, fs: &mut FileSystem) -> Result { - let node = try!(fs.node(self.block)); + let node = fs.node(self.block)?; stat.st_dev = 0; //TODO stat.st_ino = node.0; stat.st_mode = node.1.mode; stat.st_uid = node.1.uid; stat.st_gid = node.1.gid; - stat.st_size = try!(fs.node_len(self.block)); + stat.st_size = fs.node_len(self.block)?; Ok(0) } @@ -215,7 +215,7 @@ impl Resource for FileResource { fn truncate(&mut self, len: usize, fs: &mut FileSystem) -> Result { if self.flags & O_ACCMODE == O_RDWR || self.flags & O_ACCMODE == O_WRONLY { - try!(fs.node_set_len(self.block, len as u64)); + fs.node_set_len(self.block, len as u64)?; Ok(0) } else { Err(Error::new(EBADF)) diff --git a/mount/redox/scheme.rs b/mount/redox/scheme.rs index 807a334038..3587a86062 100644 --- a/mount/redox/scheme.rs +++ b/mount/redox/scheme.rs @@ -89,7 +89,7 @@ impl Scheme for FileScheme { } let mut children = Vec::new(); - try!(fs.child_nodes(&mut children, node.0)); + fs.child_nodes(&mut children, node.0)?; let mut data = Vec::new(); for child in children.iter() { @@ -130,11 +130,11 @@ impl Scheme for FileScheme { return Err(Error::new(EACCES)); } - try!(fs.node_set_len(node.0, 0)); + fs.node_set_len(node.0, 0)?; } let seek = if flags & O_APPEND == O_APPEND { - try!(fs.node_len(node.0)) + fs.node_len(node.0)? } else { 0 }; @@ -157,10 +157,10 @@ impl Scheme for FileScheme { let dir = flags & O_DIRECTORY == O_DIRECTORY; - let mut node = try!(fs.create_node(if dir { Node::MODE_DIR } else { Node::MODE_FILE } | (flags as u16 & Node::MODE_PERM), &last_part, parent.0)); + let mut node = fs.create_node(if dir { Node::MODE_DIR } else { Node::MODE_FILE } | (flags as u16 & Node::MODE_PERM), &last_part, parent.0)?; node.1.uid = uid; node.1.gid = gid; - try!(fs.write_at(node.0, &node.1)); + fs.write_at(node.0, &node.1)?; if (flags & O_ACCMODE == O_RDONLY || flags & O_ACCMODE == O_RDWR) && ! node.1.permission(uid, gid, Node::MODE_READ) { // println!("file not readable {:o}", node.1.mode); @@ -176,7 +176,7 @@ impl Scheme for FileScheme { Box::new(DirResource::new(path.to_string(), node.0, Vec::new())) } else { let seek = if flags & O_APPEND == O_APPEND { - try!(fs.node_len(node.0)) + fs.node_len(node.0)? } else { 0 }; @@ -211,7 +211,7 @@ impl Scheme for FileScheme { if let Some(mut node) = path_nodes(&mut fs, path, uid, gid, &mut nodes)? { if node.1.uid == uid || uid == 0 { node.1.mode = (node.1.mode & ! MODE_PERM) | (mode & MODE_PERM); - try!(fs.write_at(node.0, &node.1)); + fs.write_at(node.0, &node.1)?; Ok(0) } else { Err(Error::new(EPERM)) diff --git a/src/filesystem.rs b/src/filesystem.rs index f420364888..c4ca2a7be3 100644 --- a/src/filesystem.rs +++ b/src/filesystem.rs @@ -16,14 +16,14 @@ impl FileSystem { pub fn open(mut disk: Box) -> Result { for block in 0..65536 { let mut header = (0, Header::default()); - try!(disk.read_at(block + header.0, &mut header.1)); + disk.read_at(block + header.0, &mut header.1)?; if header.1.valid() { let mut root = (header.1.root, Node::default()); - try!(disk.read_at(block + root.0, &mut root.1)); + disk.read_at(block + root.0, &mut root.1)?; let mut free = (header.1.free, Node::default()); - try!(disk.read_at(block + free.0, &mut free.1)); + disk.read_at(block + free.0, &mut free.1)?; return Ok(FileSystem { disk: disk, @@ -38,18 +38,18 @@ impl FileSystem { /// Create a file system on a disk pub fn create(mut disk: Box) -> Result { - let size = try!(disk.size()); + let size = disk.size()?; if size >= 4 * 512 { let mut free = (2, Node::new(Node::MODE_FILE, "free", 0)); free.1.extents[0] = Extent::new(4, size - 4 * 512); - try!(disk.write_at(free.0, &free.1)); + disk.write_at(free.0, &free.1)?; let root = (1, Node::new(Node::MODE_DIR | 0o755, "root", 0)); - try!(disk.write_at(root.0, &root.1)); + disk.write_at(root.0, &root.1)?; let header = (0, Header::new(size, root.0, free.0)); - try!(disk.write_at(header.0, &header.1)); + disk.write_at(header.0, &header.1)?; Ok(FileSystem { disk: disk, @@ -72,7 +72,7 @@ impl FileSystem { pub fn allocate(&mut self, length: u64) -> Result { //TODO: traverse next pointer let free_block = self.header.1.free; - let mut free = try!(self.node(free_block)); + let mut free = self.node(free_block)?; let mut block_option = None; for mut extent in free.1.extents.iter_mut() { if extent.length/512 >= length { @@ -83,7 +83,7 @@ impl FileSystem { } } if let Some(block) = block_option { - try!(self.write_at(free.0, &free.1)); + self.write_at(free.0, &free.1)?; Ok(block) } else { Err(Error::new(ENOSPC)) @@ -97,13 +97,13 @@ impl FileSystem { pub fn node(&mut self, block: u64) -> Result<(u64, Node)> { let mut node = Node::default(); - try!(self.read_at(block, &mut node)); + self.read_at(block, &mut node)?; Ok((block, node)) } pub fn ex_node(&mut self, block: u64) -> Result<(u64, ExNode)> { let mut node = ExNode::default(); - try!(self.read_at(block, &mut node)); + self.read_at(block, &mut node)?; Ok((block, node)) } @@ -112,11 +112,11 @@ impl FileSystem { return Ok(()); } - let parent = try!(self.node(parent_block)); + let parent = self.node(parent_block)?; for extent in parent.1.extents.iter() { for (block, size) in extent.blocks() { if size >= 512 { - children.push(try!(self.node(block))); + children.push(self.node(block)?); } } } @@ -129,11 +129,11 @@ impl FileSystem { return Err(Error::new(ENOENT)); } - let parent = try!(self.node(parent_block)); + let parent = self.node(parent_block)?; for extent in parent.1.extents.iter() { for (block, size) in extent.blocks() { if size >= 512 { - let child = try!(self.node(block)); + let child = self.node(block)?; let mut matches = false; if let Ok(child_name) = child.1.name() { @@ -158,7 +158,7 @@ impl FileSystem { } let mut inserted = false; - let mut parent = try!(self.node(parent_block)); + let mut parent = self.node(parent_block)?; for mut extent in parent.1.extents.iter_mut() { if extent.length == 0 { //New extent @@ -181,13 +181,13 @@ impl FileSystem { } if inserted { - try!(self.write_at(parent.0, &parent.1)); + self.write_at(parent.0, &parent.1)?; Ok(()) } else { if parent.1.next == 0 { - parent.1.next = try!(self.allocate(1)); - try!(self.write_at(parent.0, &parent.1)); - try!(self.write_at(parent.1.next, &Node::default())); + parent.1.next = self.allocate(1)?; + self.write_at(parent.0, &parent.1)?; + self.write_at(parent.1.next, &Node::default())?; } self.insert_blocks(block, length, parent.1.next) @@ -198,10 +198,10 @@ impl FileSystem { if self.find_node(name, parent_block).is_ok() { Err(Error::new(EEXIST)) } else { - let node = (try!(self.allocate(1)), Node::new(mode, name, parent_block)); - try!(self.write_at(node.0, &node.1)); + let node = (self.allocate(1)?, Node::new(mode, name, parent_block)); + self.write_at(node.0, &node.1)?; - try!(self.insert_blocks(node.0, 512, parent_block)); + self.insert_blocks(node.0, 512, parent_block)?; Ok(node) } @@ -214,7 +214,7 @@ impl FileSystem { let mut removed = false; let mut replace_option = None; - let mut parent = try!(self.node(parent_block)); + let mut parent = self.node(parent_block)?; for mut extent in parent.1.extents.iter_mut() { if block >= extent.block && block + length <= extent.block + extent.length/512 { //Inside @@ -240,13 +240,13 @@ impl FileSystem { } if removed { - try!(self.write_at(parent.0, &parent.1)); + self.write_at(parent.0, &parent.1)?; if let Some(replace) = replace_option { - try!(self.insert_blocks(replace.block, replace.length, parent_block)); + self.insert_blocks(replace.block, replace.length, parent_block)?; } - try!(self.deallocate(block, 512)); + self.deallocate(block, 512)?; Ok(()) } else { @@ -255,18 +255,18 @@ impl FileSystem { } pub fn remove_node(&mut self, mode: u16, name: &str, parent_block: u64) -> Result<()> { - let node = try!(self.find_node(name, parent_block)); + let node = self.find_node(name, parent_block)?; if node.1.mode & Node::MODE_TYPE == mode { if node.1.is_dir() { let mut children = Vec::new(); - try!(self.child_nodes(&mut children, node.0)); + self.child_nodes(&mut children, node.0)?; if ! children.is_empty() { return Err(Error::new(ENOTEMPTY)); } } - try!(self.remove_blocks(node.0, 1, parent_block)); - try!(self.write_at(node.0, &Node::default())); + self.remove_blocks(node.0, 1, parent_block)?; + self.write_at(node.0, &Node::default())?; Ok(()) } else if node.1.is_dir() { @@ -283,7 +283,7 @@ impl FileSystem { let mut changed = false; - let mut node = try!(self.node(block)); + let mut node = self.node(block)?; for mut extent in node.1.extents.iter_mut() { if extent.length >= length { length = 0; @@ -303,15 +303,15 @@ impl FileSystem { } if changed { - try!(self.write_at(node.0, &node.1)); + self.write_at(node.0, &node.1)?; } if length > 0 { if node.1.next > 0 { self.node_ensure_len(node.1.next, length) } else { - let new_block = try!(self.allocate((length + 511)/512)); - try!(self.insert_blocks(new_block, length, block)); + let new_block = self.allocate((length + 511)/512)?; + self.insert_blocks(new_block, length, block)?; Ok(()) } } else { @@ -326,10 +326,10 @@ impl FileSystem { let mut changed = false; - let mut node = try!(self.node(block)); + let mut node = self.node(block)?; for mut extent in node.1.extents.iter_mut() { if extent.length > length { - //TODO: try!(self.deallocate(block, 512)); + //TODO: self.deallocate(block, 512)?; extent.length = length; changed = true; length = 0; @@ -339,7 +339,7 @@ impl FileSystem { } if changed { - try!(self.write_at(node.0, &node.1)); + self.write_at(node.0, &node.1)?; } if node.1.next > 0 { @@ -354,7 +354,7 @@ impl FileSystem { return Ok(()); } - let node = try!(self.node(block)); + let node = self.node(block)?; for extent in node.1.extents.iter() { let mut push_extent = Extent::default(); for (block, size) in extent.blocks() { @@ -396,7 +396,7 @@ impl FileSystem { let mut byte_offset = (offset % 512) as usize; let mut extents = Vec::new(); - try!(self.node_extents(block, block_offset, byte_offset + buf.len(), &mut extents)); + self.node_extents(block, block_offset, byte_offset + buf.len(), &mut extents)?; let mut i = 0; for extent in extents.iter() { @@ -405,7 +405,7 @@ impl FileSystem { if byte_offset > 0 && length > 0 { let mut sector = [0; 512]; - try!(self.read_at(block, &mut sector)); + self.read_at(block, &mut sector)?; let sector_size = min(sector.len() as u64, length) as usize; for (s_b, mut b) in sector[byte_offset..sector_size].iter().zip(buf[i..].iter_mut()) { @@ -423,7 +423,7 @@ impl FileSystem { if length_aligned > 0 { let extent_buf = &mut buf[i..i + length_aligned]; - try!(self.read_at(block, extent_buf)); + self.read_at(block, extent_buf)?; i += length_aligned; block += (length_aligned as u64)/512; length -= length_aligned as u64; @@ -431,7 +431,7 @@ impl FileSystem { if length > 0 { let mut sector = [0; 512]; - try!(self.read_at(block, &mut sector)); + self.read_at(block, &mut sector)?; let sector_size = min(sector.len() as u64, length) as usize; for (s_b, mut b) in sector[..sector_size].iter().zip(buf[i..].iter_mut()) { @@ -454,10 +454,10 @@ impl FileSystem { let block_offset = offset / 512; let mut byte_offset = (offset % 512) as usize; - try!(self.node_ensure_len(block, block_offset as u64 * 512 + (byte_offset + buf.len()) as u64)); + self.node_ensure_len(block, block_offset as u64 * 512 + (byte_offset + buf.len()) as u64)?; let mut extents = Vec::new(); - try!(self.node_extents(block, block_offset, byte_offset + buf.len(), &mut extents)); + self.node_extents(block, block_offset, byte_offset + buf.len(), &mut extents)?; let mut i = 0; for extent in extents.iter() { @@ -466,7 +466,7 @@ impl FileSystem { if byte_offset > 0 && length > 0 { let mut sector = [0; 512]; - try!(self.read_at(block, &mut sector)); + self.read_at(block, &mut sector)?; let sector_size = min(sector.len() as u64, length) as usize; for (mut s_b, b) in sector[byte_offset..sector_size].iter_mut().zip(buf[i..].iter()) { @@ -474,7 +474,7 @@ impl FileSystem { i += 1; } - try!(self.write_at(block, §or)); + self.write_at(block, §or)?; block += 1; length -= sector_size as u64; @@ -486,7 +486,7 @@ impl FileSystem { if length_aligned > 0 { let extent_buf = &buf[i..i + length_aligned]; - try!(self.write_at(block, extent_buf)); + self.write_at(block, extent_buf)?; i += length_aligned; block += (length_aligned as u64)/512; length -= length_aligned as u64; @@ -494,7 +494,7 @@ impl FileSystem { if length > 0 { let mut sector = [0; 512]; - try!(self.read_at(block, &mut sector)); + self.read_at(block, &mut sector)?; let sector_size = min(sector.len() as u64, length) as usize; for (mut s_b, b) in sector[..sector_size].iter_mut().zip(buf[i..].iter()) { @@ -502,7 +502,7 @@ impl FileSystem { i += 1; } - try!(self.write_at(block, §or)); + self.write_at(block, §or)?; block += 1; length -= sector_size as u64; @@ -522,13 +522,13 @@ impl FileSystem { let mut size = 0; - let node = try!(self.node(block)); + let node = self.node(block)?; for extent in node.1.extents.iter() { size += extent.length; } if node.1.next > 0 { - size += try!(self.node_len(node.1.next)); + size += self.node_len(node.1.next)?; Ok(size) } else { Ok(size)