From 26e1db0c80e76cbb772c2372ca44eb69e398e270 Mon Sep 17 00:00:00 2001 From: 4lDO2 <4lDO2@protonmail.com> Date: Wed, 11 Sep 2024 21:38:54 +0200 Subject: [PATCH] Add missing opaque offset to getdents. --- src/lib.rs | 12 ++++++++---- src/scheme.rs | 7 ++++++- src/scheme_block.rs | 1 + src/scheme_block_mut.rs | 1 + src/scheme_mut.rs | 1 + 5 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 79076dc..3ec4eec 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -303,7 +303,7 @@ impl CallRequest<V2> { gid: hack_gid, }; - let [a, b, c, d, _e, _f] = args.map(|a| a as usize); + let [a, b, c, d, e, _f] = args.map(|a| a as usize); let result = unsafe { use core::{slice, str}; match opcode { @@ -374,7 +374,9 @@ impl CallRequest<V2> { ), Opcode::Getdents => { DirentBuf::new(slice::from_raw_parts_mut(b as *mut u8, c), d as u16) - .map_or(Err(Error::new(EINVAL)), |buf| scheme.getdents(a, buf)) + .map_or(Err(Error::new(EINVAL)), |buf| { + scheme.getdents(a, buf, e as u64) + }) .map(|b| b.finalize()) } @@ -439,7 +441,7 @@ impl CallRequest<V2> { gid: hack_gid, }; - let [a, b, c, d, _e, _f] = args.map(|a| a as usize); + let [a, b, c, d, e, _f] = args.map(|a| a as usize); let result = unsafe { use core::{slice, str}; match opcode { @@ -524,7 +526,9 @@ impl CallRequest<V2> { Opcode::Getdents => { DirentBuf::new(slice::from_raw_parts_mut(b as *mut u8, c), d as u16) - .map_or(Err(Error::new(EINVAL)), |buf| scheme.getdents(a, buf)) + .map_or(Err(Error::new(EINVAL)), |buf| { + scheme.getdents(a, buf, e as u64) + }) .map(|b| b.map(|b| b.finalize())) .transpose()? } diff --git a/src/scheme.rs b/src/scheme.rs index 78a2b2a..04a6779 100644 --- a/src/scheme.rs +++ b/src/scheme.rs @@ -165,7 +165,12 @@ pub trait Scheme { } #[allow(unused_variables)] - fn getdents(&self, id: usize, buf: DirentBuf<&'_ mut [u8]>) -> Result<DirentBuf<&'_ mut [u8]>> { + fn getdents( + &self, + id: usize, + buf: DirentBuf<&'_ mut [u8]>, + opaque_offset: u64, + ) -> Result<DirentBuf<&'_ mut [u8]>> { Err(Error::new(EBADF)) } diff --git a/src/scheme_block.rs b/src/scheme_block.rs index c19ba24..1b6c3a0 100644 --- a/src/scheme_block.rs +++ b/src/scheme_block.rs @@ -175,6 +175,7 @@ pub trait SchemeBlock { &self, id: usize, buf: DirentBuf<&'_ mut [u8]>, + opaque_offset: u64, ) -> Result<Option<DirentBuf<&'_ mut [u8]>>> { Err(Error::new(EBADF)) } diff --git a/src/scheme_block_mut.rs b/src/scheme_block_mut.rs index 0e7a41b..d7ddb1d 100644 --- a/src/scheme_block_mut.rs +++ b/src/scheme_block_mut.rs @@ -181,6 +181,7 @@ pub trait SchemeBlockMut { &mut self, id: usize, buf: DirentBuf<&'_ mut [u8]>, + opaque_offset: u64, ) -> Result<Option<DirentBuf<&'_ mut [u8]>>> { Err(Error::new(EBADF)) } diff --git a/src/scheme_mut.rs b/src/scheme_mut.rs index def9c5e..24cd632 100644 --- a/src/scheme_mut.rs +++ b/src/scheme_mut.rs @@ -169,6 +169,7 @@ pub trait SchemeMut { &mut self, id: usize, buf: DirentBuf<&'_ mut [u8]>, + opaque_offset: u64, ) -> Result<DirentBuf<&'_ mut [u8]>> { Err(Error::new(EBADF)) } -- GitLab