Use ? instead of try!

This commit is contained in:
Ian Douglas Scott
2017-05-28 23:06:45 -07:00
parent 05e3802844
commit 1f90f21147
4 changed files with 69 additions and 69 deletions
+2 -2
View File
@@ -51,7 +51,7 @@ impl<T: Disk> Disk for Cache<T> {
}
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<T: Disk> Disk for Cache<T> {
fn write_at(&mut self, block: u64, buffer: &[u8]) -> Result<usize> {
// 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 {
+8 -8
View File
@@ -88,7 +88,7 @@ impl Resource for DirResource {
}
fn stat(&self, stat: &mut Stat, fs: &mut FileSystem) -> Result<usize> {
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<usize> {
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<usize> {
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<usize> {
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<usize> {
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<usize> {
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))
+7 -7
View File
@@ -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))
+52 -52
View File
@@ -16,14 +16,14 @@ impl FileSystem {
pub fn open(mut disk: Box<Disk>) -> Result<Self> {
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<Disk>) -> Result<Self> {
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<u64> {
//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, &sector));
self.write_at(block, &sector)?;
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, &sector));
self.write_at(block, &sector)?;
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)