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