Fix the return error code of file operations

This commit is contained in:
LI Qing 2021-09-22 14:38:12 +08:00 committed by Zongmin.Gu
parent 36990fc97c
commit c9083c787c

@ -14,7 +14,7 @@ pub struct INodeFile {
impl File for INodeFile { impl File for INodeFile {
fn read(&self, buf: &mut [u8]) -> Result<usize> { fn read(&self, buf: &mut [u8]) -> Result<usize> {
if !self.access_mode.readable() { if !self.access_mode.readable() {
return_errno!(EACCES, "File not readable"); return_errno!(EBADF, "File not readable");
} }
let mut offset = self.offset.lock().unwrap(); let mut offset = self.offset.lock().unwrap();
let len = self.inode.read_at(*offset, buf).map_err(|e| errno!(e))?; let len = self.inode.read_at(*offset, buf).map_err(|e| errno!(e))?;
@ -24,7 +24,7 @@ impl File for INodeFile {
fn write(&self, buf: &[u8]) -> Result<usize> { fn write(&self, buf: &[u8]) -> Result<usize> {
if !self.access_mode.writable() { if !self.access_mode.writable() {
return_errno!(EACCES, "File not writable"); return_errno!(EBADF, "File not writable");
} }
let mut offset = self.offset.lock().unwrap(); let mut offset = self.offset.lock().unwrap();
if self.status_flags.read().unwrap().always_append() { if self.status_flags.read().unwrap().always_append() {
@ -38,7 +38,7 @@ impl File for INodeFile {
fn read_at(&self, offset: usize, buf: &mut [u8]) -> Result<usize> { fn read_at(&self, offset: usize, buf: &mut [u8]) -> Result<usize> {
if !self.access_mode.readable() { if !self.access_mode.readable() {
return_errno!(EACCES, "File not readable"); return_errno!(EBADF, "File not readable");
} }
let len = self.inode.read_at(offset, buf)?; let len = self.inode.read_at(offset, buf)?;
Ok(len) Ok(len)
@ -46,7 +46,7 @@ impl File for INodeFile {
fn write_at(&self, offset: usize, buf: &[u8]) -> Result<usize> { fn write_at(&self, offset: usize, buf: &[u8]) -> Result<usize> {
if !self.access_mode.writable() { if !self.access_mode.writable() {
return_errno!(EACCES, "File not writable"); return_errno!(EBADF, "File not writable");
} }
let len = self.inode.write_at(offset, buf)?; let len = self.inode.write_at(offset, buf)?;
Ok(len) Ok(len)
@ -54,7 +54,7 @@ impl File for INodeFile {
fn readv(&self, bufs: &mut [&mut [u8]]) -> Result<usize> { fn readv(&self, bufs: &mut [&mut [u8]]) -> Result<usize> {
if !self.access_mode.readable() { if !self.access_mode.readable() {
return_errno!(EACCES, "File not readable"); return_errno!(EBADF, "File not readable");
} }
let mut offset = self.offset.lock().unwrap(); let mut offset = self.offset.lock().unwrap();
let mut total_len = 0; let mut total_len = 0;
@ -73,7 +73,7 @@ impl File for INodeFile {
fn writev(&self, bufs: &[&[u8]]) -> Result<usize> { fn writev(&self, bufs: &[&[u8]]) -> Result<usize> {
if !self.access_mode.writable() { if !self.access_mode.writable() {
return_errno!(EACCES, "File not writable"); return_errno!(EBADF, "File not writable");
} }
let mut offset = self.offset.lock().unwrap(); let mut offset = self.offset.lock().unwrap();
if self.status_flags.read().unwrap().always_append() { if self.status_flags.read().unwrap().always_append() {
@ -138,7 +138,7 @@ impl File for INodeFile {
fn set_len(&self, len: u64) -> Result<()> { fn set_len(&self, len: u64) -> Result<()> {
if !self.access_mode.writable() { if !self.access_mode.writable() {
return_errno!(EACCES, "File not writable. Can't set len."); return_errno!(EBADF, "File not writable. Can't set len.");
} }
self.inode.resize(len as usize)?; self.inode.resize(len as usize)?;
Ok(()) Ok(())
@ -156,7 +156,7 @@ impl File for INodeFile {
fn iterate_entries(&self, writer: &mut dyn DirentWriter) -> Result<usize> { fn iterate_entries(&self, writer: &mut dyn DirentWriter) -> Result<usize> {
if !self.access_mode.readable() { if !self.access_mode.readable() {
return_errno!(EACCES, "File not readable. Can't read entry."); return_errno!(EBADF, "File not readable. Can't read entry.");
} }
let mut offset = self.offset.lock().unwrap(); let mut offset = self.offset.lock().unwrap();
let mut dir_ctx = DirentWriterContext::new(*offset, writer); let mut dir_ctx = DirentWriterContext::new(*offset, writer);