diff --git a/gdriver-client/src/filesystem.rs b/gdriver-client/src/filesystem.rs index 7626180..b97a153 100644 --- a/gdriver-client/src/filesystem.rs +++ b/gdriver-client/src/filesystem.rs @@ -183,6 +183,23 @@ impl fuser::Filesystem for Filesystem { ) { let id = self.get_id_from_ino(ino); info!("Reading dir: {id:?}/{ino}"); + let mut counter = 0; + if offset == 0 { + counter += 1; + let full = reply.add(ino, counter, fuser::FileType::Directory, "."); + if full { + reply.ok(); + return; + } + } + if offset + counter == 1 { + counter += 1; + let full = reply.add(0, counter, fuser::FileType::Directory, ".."); + if full { + reply.ok(); + return; + } + } if let Err(e) = utils::update::update(self) { error!("Got an error during update in readdir: {}", e); dbg!(e); @@ -193,10 +210,9 @@ impl fuser::Filesystem for Filesystem { match id { None => {} Some(id) => { - let result = utils::readdir::readdir(self, id.clone(), offset as u64); + let result = utils::readdir::readdir(self, id.clone(), (offset + counter) as u64); match result { Ok(entries) => { - let mut counter = 0; for entry in entries { let ino = self.get_ino_from_id(entry.id); counter += 1; diff --git a/gdriver-client/src/filesystem/attributes.rs b/gdriver-client/src/filesystem/attributes.rs index 1ee4b63..573bc63 100644 --- a/gdriver-client/src/filesystem/attributes.rs +++ b/gdriver-client/src/filesystem/attributes.rs @@ -77,10 +77,6 @@ fn parse_xattr_namespace(key: &[u8]) -> StdResult { return Err(libc::ENOTSUP); } -fn time_now() -> (i64, u32) { - time_from_system_time(&SystemTime::now()) -} - #[derive(Serialize, Deserialize)] pub(crate) struct InodeAttributes { pub inode: Inode, diff --git a/gdriver-common/src/drive_structure/meta.rs b/gdriver-common/src/drive_structure/meta.rs index 53cedd7..afcc31a 100644 --- a/gdriver-common/src/drive_structure/meta.rs +++ b/gdriver-common/src/drive_structure/meta.rs @@ -1,5 +1,6 @@ use crate::ipc::gdriver_service::SETTINGS; use crate::prelude::*; +use crate::time_utils::time_now; use serde::{Deserialize, Serialize}; use std::{collections::BTreeMap, fs::File, path::Path}; @@ -21,17 +22,19 @@ pub struct Metadata { pub extra_attributes: BTreeMap, Vec>, } +const PERMISSIONS_RWXRWXRWX: u16 = 0b111_111_111; // 511; + impl Metadata { pub fn root() -> Self { Self { id: ROOT_ID.clone(), state: FileState::Root, size: 0, - last_accessed: (0, 0), - last_modified: (0, 0), - last_metadata_changed: (0, 0), + last_accessed: time_now(), + last_modified: time_now(), + last_metadata_changed: time_now(), kind: FileKind::Directory, - permissions: 0, + permissions: PERMISSIONS_RWXRWXRWX, extra_attributes: Default::default(), } } diff --git a/gdriver-common/src/time_utils.rs b/gdriver-common/src/time_utils.rs index 55361e2..7bded34 100644 --- a/gdriver-common/src/time_utils.rs +++ b/gdriver-common/src/time_utils.rs @@ -37,3 +37,7 @@ pub fn time_from_system_time(system_time: &SystemTime) -> (i64, u32) { ), } } + +pub fn time_now() -> (i64, u32) { + time_from_system_time(&SystemTime::now()) +}