diff --git a/src/smbc.rs b/src/smbc.rs index e7f8c24..a069c6a 100644 --- a/src/smbc.rs +++ b/src/smbc.rs @@ -124,6 +124,11 @@ pub struct SmbFile<'a: 'b, 'b> { smbc: &'b SmbClient<'a>, fd: *mut SMBCFILE, } + +pub struct SmbDirectory<'a: 'b, 'b> { + smbc: &'b SmbClient<'a>, + pub fd: *mut smbc_dirent, +} // 1}}} /// Default (dummy) credential `WORKGROUP\guest` with empty password @@ -233,6 +238,60 @@ impl<'a> SmbClient<'a> { Ok(SmbFile { smbc: &self, fd }) } + /// READ DIR + /// + /// See [OpenOptions](struct.OpenOptions.html). + pub fn read_dir<'b, P: AsRef>(&'b self,path: P) -> Result>{ + + let read_dir_fn = self.get_fn(smbc_getFunctionReaddir)?; + let open_dir_fn = self.get_fn(smbc_getFunctionOpendir)?; + + let path = cstring(path)?; + trace!(target: "smbc", "opening {:?} with {:?}", path, read_dir_fn); + + let dir = result_from_ptr_mut(open_dir_fn(self.ctx, path.as_ptr()))?; + let fd = result_from_ptr_mut(read_dir_fn(self.ctx, dir))?; + if (fd as i64) < 0 { + trace!(target: "smbc", "neg fd"); + } + Ok(SmbDirectory { smbc: &self, fd }) + } + + /// READ DIR + /// + /// See [OpenOptions](struct.OpenOptions.html). + pub fn read_dirents<'b, P: AsRef>(&'b self,path: P) -> Result>{ + + let read_dir_fn = self.get_fn(smbc_getFunctionReaddir)?; + let open_dir_fn = self.get_fn(smbc_getFunctionOpendir)?; + let get_dents_fn = self.get_fn(smbc_getFunctionGetdents)?; + + let path = cstring(path)?; + trace!(target: "smbc", "opening {:?} with {:?}", path, read_dir_fn); + + let dir = result_from_ptr_mut(open_dir_fn(self.ctx, path.as_ptr()))?; + let fd = result_from_ptr_mut(read_dir_fn(self.ctx, dir)).expect("Can't read file"); + let _fd = result_from_ptr_mut(read_dir_fn(self.ctx, dir)).expect("Can't read file"); + let _fd = result_from_ptr_mut(read_dir_fn(self.ctx, dir)).expect("Can't read file"); + let _fd = result_from_ptr_mut(read_dir_fn(self.ctx, dir)).expect("Can't read file"); + let _fd = result_from_ptr_mut(read_dir_fn(self.ctx, dir)).expect("Can't read file"); + let _fd = result_from_ptr_mut(read_dir_fn(self.ctx, dir)).expect("Can't read file"); + let _fd = result_from_ptr_mut(read_dir_fn(self.ctx, dir)).is_err(); + println!("{}", _fd); + + + //Returns number of read bytes + //let out_test = get_dents_fn(self.ctx, dir, fd, 200); + if (fd as i64) < 0 { + trace!(target: "smbc", "neg fd"); + } + // let out_test = get_dents_fn(self.ctx, dir, fd, 2); + // let out_test = get_dents_fn(self.ctx, dir, fd, 2); + //println!("{}", out_test); + + Ok(SmbDirectory { smbc: &self, fd }) + } + /// Open read-only [`SmbFile`](struct.SmbFile.html) defined by SMB `path`. /// /// Alias for [`open_ro(..)`](struct.SmbClient.html#method.open_ro).