Use ? instead of try!
This commit is contained in:
Vendored
+2
-2
@@ -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 {
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
@@ -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, §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)
|
||||
|
||||
Reference in New Issue
Block a user