From ed3d9e32def4ef44d19b939af80a6d335285d6dd Mon Sep 17 00:00:00 2001 From: Michael Doronin Date: Wed, 28 Oct 2020 15:45:31 +0300 Subject: [PATCH 1/4] Remove dead code --- src/result.rs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/result.rs b/src/result.rs index a941513..fd0cc04 100644 --- a/src/result.rs +++ b/src/result.rs @@ -28,7 +28,6 @@ pub type Result = result::Result; pub enum Error { NewContext(io::Error), InitContext(io::Error), - AuthCallbackPaniced(Box), NulInPath(ffi::NulError), Io(io::Error), } @@ -40,7 +39,6 @@ impl fmt::Display for Error { Error::InitContext(ref err) => write!(f, "Init context error: {}", err), Error::Io(ref err) => write!(f, "IO error: {}", err), Error::NulInPath(ref err) => write!(f, "NUL in path: {}", err), - Error::AuthCallbackPaniced(ref err) => write!(f, "Auth callback paniced last time: {}", err) } } } @@ -52,7 +50,6 @@ impl error::Error for Error { Error::InitContext(ref err) => err.description(), Error::Io(ref err) => err.description(), Error::NulInPath(ref err) => err.description(), - Error::AuthCallbackPaniced(ref _err) => "panic in auth callback", } } @@ -62,7 +59,6 @@ impl error::Error for Error { Error::InitContext(ref err) => Some(err), Error::Io(ref err) => Some(err), Error::NulInPath(ref err) => Some(err), - Error::AuthCallbackPaniced(ref err) => Some(err.as_ref()), } } } From 554acf08b5e46f9f82404e8e126815291d68d9d5 Mon Sep 17 00:00:00 2001 From: Michael Doronin Date: Wed, 28 Oct 2020 15:45:49 +0300 Subject: [PATCH 2/4] Use ? instead of try --- src/smbc.rs | 30 +++++++++++++++--------------- src/util.rs | 6 +++--- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/smbc.rs b/src/smbc.rs index 2874bcd..51c9994 100644 --- a/src/smbc.rs +++ b/src/smbc.rs @@ -148,7 +148,7 @@ impl<'a> SmbClient<'a> { }; unsafe { - let ctx = try!(result_from_ptr_mut(smbc_new_context())); + let ctx = result_from_ptr_mut(smbc_new_context())?; smbc_setOptionUserData(ctx, auth_fn as *const _ as *mut c_void); smbc_setFunctionAuthDataWithContext(ctx, Some(Self::auth_wrapper::)); @@ -158,7 +158,7 @@ impl<'a> SmbClient<'a> { smbc_setOptionDebugToStderr(ctx, SMBC_TRUE); //smbc_setDebug(ctx, 10); - smbc.ctx = try!(result_from_ptr_mut(smbc_init_context(ctx))); + smbc.ctx = result_from_ptr_mut(smbc_init_context(ctx))?; } trace!(target: "smbc", "new smbclient"); @@ -208,14 +208,14 @@ impl<'a> SmbClient<'a> { let open_fn = try_ufn!(smbc_getFunctionOpen <- self); - let path = try!(cstring(path)); + let path = cstring(path)?; trace!(target: "smbc", "opening {:?} with {:?}", path, open_fn); unsafe { - let fd = try!(result_from_ptr_mut(open_fn(self.ctx, + let fd = result_from_ptr_mut(open_fn(self.ctx, path.as_ptr(), try!(options.to_flags()), - options.mode))); + options.mode))?; if (fd as i64) < 0 { trace!(target: "smbc", "neg fd"); } @@ -273,7 +273,7 @@ impl<'a> SmbClient<'a> { /// Get metadata for file at `path` pub fn metadata>(&self, path: P) -> Result<()> { let stat_fn = try_ufn!(smbc_getFunctionStat <- self); - let path = try!(cstring(path)); + let path = cstring(path)?; unimplemented!(); } @@ -281,8 +281,8 @@ impl<'a> SmbClient<'a> { /// Create new directory at SMB `path` pub fn create_dir>(&self, path: P) -> Result<()> { let mkdir_fn = try_ufn!(smbc_getFunctionMkdir <- self); - let path = try!(cstring(path)); - try!(to_result_with_le(unsafe { mkdir_fn(self.ctx, path.as_ptr(), 0o755) })); + let path = cstring(path)?; + to_result_with_le(unsafe { mkdir_fn(self.ctx, path.as_ptr(), 0o755) })?; Ok(()) } @@ -295,8 +295,8 @@ impl<'a> SmbClient<'a> { /// Directory should be empty to delete it. pub fn remove_dir>(&self, path: P) -> Result<()> { let rmdir_fn = try_ufn!(smbc_getFunctionRmdir <- self); - let path = try!(cstring(path)); - try!(to_result_with_le(unsafe { rmdir_fn(self.ctx, path.as_ptr()) })); + let path = cstring(path)?; + to_result_with_le(unsafe { rmdir_fn(self.ctx, path.as_ptr()) })?; Ok(()) } } // 2}}} @@ -426,12 +426,12 @@ impl<'a, 'b> Read for SmbFile<'a, 'b> { fn read(&mut self, buf: &mut [u8]) -> io::Result { trace!(target: "smbc", "reading file to buf [{:?};{}]", buf.as_ptr(), buf.len()); let read_fn = try_ufn!(smbc_getFunctionRead <- self.smbc); - let bytes_read = try!(to_result_with_le(unsafe { + let bytes_read = to_result_with_le(unsafe { read_fn(self.smbc.ctx, self.fd, buf.as_mut_ptr() as *mut c_void, buf.len() as _) - })); + })?; Ok(bytes_read as usize) } } // }}} @@ -441,12 +441,12 @@ impl<'a, 'b> Write for SmbFile<'a, 'b> { fn write(&mut self, buf: &[u8]) -> io::Result { trace!(target: "smbc", "writing buf [{:?};{}] to file", buf.as_ptr(), buf.len()); let write_fn = try_ufn!(smbc_getFunctionWrite <- self.smbc); - let bytes_wrote = try!(to_result_with_le(unsafe { + let bytes_wrote = to_result_with_le(unsafe { write_fn(self.smbc.ctx, self.fd, buf.as_ptr() as *const c_void, buf.len() as _) - })); + })?; Ok(bytes_wrote as usize) } @@ -466,7 +466,7 @@ impl<'a, 'b> Seek for SmbFile<'a, 'b> { SeekFrom::End(p) => (libc::SEEK_END, p as off_t), SeekFrom::Current(p) => (libc::SEEK_CUR, p as off_t), }; - let res = try!(to_result_with_errno(unsafe { lseek_fn(self.smbc.ctx, self.fd, off, whence) }, libc::EINVAL)); + let res = to_result_with_errno(unsafe { lseek_fn(self.smbc.ctx, self.fd, off, whence) }, libc::EINVAL)?; Ok(res as u64) } } // }}} diff --git a/src/util.rs b/src/util.rs index fee2aa4..5dcb930 100644 --- a/src/util.rs +++ b/src/util.rs @@ -27,9 +27,9 @@ use result::*; /// try! get smbc function or return io::Error(EINVAL) macro_rules! try_ufn { - ($e:ident <- $s:expr) => (try!(unsafe { + ($e:ident <- $s:expr) => (unsafe { $e($s.ctx).ok_or($crate::std::io::Error::from_raw_os_error(libc::EINVAL as i32)) - })) + }?) } #[inline(always)] @@ -49,7 +49,7 @@ pub unsafe fn cstr<'a, T>(p: *const T) -> Cow<'a, str> { } pub fn cstring>(p: P) -> Result { - Ok(try!(CString::new(p.as_ref()))) + Ok(CString::new(p.as_ref())?) } pub unsafe fn write_to_cstr(dest: *mut u8, len: usize, src: &str) { From e86db16840ab1f17e42620d78e5ce7a00b4ccee7 Mon Sep 17 00:00:00 2001 From: Michael Doronin Date: Wed, 28 Oct 2020 16:03:11 +0300 Subject: [PATCH 3/4] Update Error to comply to rust >= 1.42 --- src/result.rs | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/result.rs b/src/result.rs index fd0cc04..495bc0f 100644 --- a/src/result.rs +++ b/src/result.rs @@ -44,16 +44,8 @@ impl fmt::Display for Error { } impl error::Error for Error { - fn description(&self) -> &str { - match *self { - Error::NewContext(ref err) => err.description(), - Error::InitContext(ref err) => err.description(), - Error::Io(ref err) => err.description(), - Error::NulInPath(ref err) => err.description(), - } - } - fn cause(&self) -> Option<&error::Error> { + fn source(&self) -> Option<&(dyn error::Error + 'static)> { match *self { Error::NewContext(ref err) => Some(err), Error::InitContext(ref err) => Some(err), From 104431b0c40bd48e010a4022ad8373df1f11d425 Mon Sep 17 00:00:00 2001 From: Michael Doronin Date: Wed, 28 Oct 2020 16:03:52 +0300 Subject: [PATCH 4/4] Cleanup --- src/smbc.rs | 43 ++++++++++++++++++++----------------------- src/util.rs | 2 +- 2 files changed, 21 insertions(+), 24 deletions(-) diff --git a/src/smbc.rs b/src/smbc.rs index 51c9994..4050e45 100644 --- a/src/smbc.rs +++ b/src/smbc.rs @@ -80,7 +80,7 @@ const SMBC_TRUE: smbc_bool = 1; pub struct SmbClient<'a> { ctx: *mut SMBCCTX, #[allow(dead_code)] - auth_fn: &'a for<'b> Fn(&'b str, &'b str) -> (Cow<'a, str>, Cow<'a, str>, Cow<'a, str>), + auth_fn: &'a dyn for<'b> Fn(&'b str, &'b str) -> (Cow<'a, str>, Cow<'a, str>, Cow<'a, str>), } // {{{2 @@ -211,19 +211,17 @@ impl<'a> SmbClient<'a> { let path = cstring(path)?; trace!(target: "smbc", "opening {:?} with {:?}", path, open_fn); - unsafe { - let fd = result_from_ptr_mut(open_fn(self.ctx, - path.as_ptr(), - try!(options.to_flags()), - options.mode))?; - if (fd as i64) < 0 { - trace!(target: "smbc", "neg fd"); - } - Ok(SmbFile { - smbc: &self, - fd: fd, - }) + let fd = result_from_ptr_mut(open_fn(self.ctx, + path.as_ptr(), + options.to_flags()?, + options.mode))?; + if (fd as i64) < 0 { + trace!(target: "smbc", "neg fd"); } + Ok(SmbFile { + smbc: &self, + fd: fd, + }) } /// Open read-only [`SmbFile`](struct.SmbFile.html) defined by SMB `path`. @@ -272,9 +270,8 @@ impl<'a> SmbClient<'a> { #[doc(hidden)] /// Get metadata for file at `path` pub fn metadata>(&self, path: P) -> Result<()> { - let stat_fn = try_ufn!(smbc_getFunctionStat <- self); - let path = cstring(path)?; - + let _stat_fn = try_ufn!(smbc_getFunctionStat <- self); + let _path = cstring(path)?; unimplemented!(); } @@ -282,7 +279,7 @@ impl<'a> SmbClient<'a> { pub fn create_dir>(&self, path: P) -> Result<()> { let mkdir_fn = try_ufn!(smbc_getFunctionMkdir <- self); let path = cstring(path)?; - to_result_with_le(unsafe { mkdir_fn(self.ctx, path.as_ptr(), 0o755) })?; + to_result_with_le(mkdir_fn(self.ctx, path.as_ptr(), 0o755))?; Ok(()) } @@ -296,7 +293,7 @@ impl<'a> SmbClient<'a> { pub fn remove_dir>(&self, path: P) -> Result<()> { let rmdir_fn = try_ufn!(smbc_getFunctionRmdir <- self); let path = cstring(path)?; - to_result_with_le(unsafe { rmdir_fn(self.ctx, path.as_ptr()) })?; + to_result_with_le(rmdir_fn(self.ctx, path.as_ptr()))?; Ok(()) } } // 2}}} @@ -426,12 +423,12 @@ impl<'a, 'b> Read for SmbFile<'a, 'b> { fn read(&mut self, buf: &mut [u8]) -> io::Result { trace!(target: "smbc", "reading file to buf [{:?};{}]", buf.as_ptr(), buf.len()); let read_fn = try_ufn!(smbc_getFunctionRead <- self.smbc); - let bytes_read = to_result_with_le(unsafe { + let bytes_read = to_result_with_le( read_fn(self.smbc.ctx, self.fd, buf.as_mut_ptr() as *mut c_void, buf.len() as _) - })?; + )?; Ok(bytes_read as usize) } } // }}} @@ -441,12 +438,12 @@ impl<'a, 'b> Write for SmbFile<'a, 'b> { fn write(&mut self, buf: &[u8]) -> io::Result { trace!(target: "smbc", "writing buf [{:?};{}] to file", buf.as_ptr(), buf.len()); let write_fn = try_ufn!(smbc_getFunctionWrite <- self.smbc); - let bytes_wrote = to_result_with_le(unsafe { + let bytes_wrote = to_result_with_le( write_fn(self.smbc.ctx, self.fd, buf.as_ptr() as *const c_void, buf.len() as _) - })?; + )?; Ok(bytes_wrote as usize) } @@ -466,7 +463,7 @@ impl<'a, 'b> Seek for SmbFile<'a, 'b> { SeekFrom::End(p) => (libc::SEEK_END, p as off_t), SeekFrom::Current(p) => (libc::SEEK_CUR, p as off_t), }; - let res = to_result_with_errno(unsafe { lseek_fn(self.smbc.ctx, self.fd, off, whence) }, libc::EINVAL)?; + let res = to_result_with_errno(lseek_fn(self.smbc.ctx, self.fd, off, whence), libc::EINVAL)?; Ok(res as u64) } } // }}} diff --git a/src/util.rs b/src/util.rs index 5dcb930..f218c15 100644 --- a/src/util.rs +++ b/src/util.rs @@ -16,7 +16,7 @@ // You should have received a copy of the GNU General Public License // along with smbc. If not, see . -use libc::{self, c_char, c_int}; +use libc::{c_char, c_int}; use std::borrow::Cow; use std::ffi::{CStr, CString};