Skip to content

Commit fc074db

Browse files
committed
Change listxattr's list argument to [u8].
Change `listxattr`'s `list` argument from [`c_char`] to `[u8]`, since it's more ergonomic to use with APIs like `CStr::from_bytes_with_nul`. Fixes #1218.
1 parent 3e64878 commit fc074db

File tree

3 files changed

+33
-16
lines changed

3 files changed

+33
-16
lines changed

src/backend/libc/fs/syscalls.rs

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2441,53 +2441,70 @@ pub(crate) fn fsetxattr(
24412441
}
24422442

24432443
#[cfg(any(apple, linux_kernel, target_os = "hurd"))]
2444-
pub(crate) fn listxattr(path: &CStr, list: &mut [ffi::c_char]) -> io::Result<usize> {
2444+
pub(crate) fn listxattr(path: &CStr, list: &mut [u8]) -> io::Result<usize> {
24452445
#[cfg(not(apple))]
24462446
unsafe {
2447-
ret_usize(c::listxattr(path.as_ptr(), list.as_mut_ptr(), list.len()))
2447+
ret_usize(c::listxattr(
2448+
path.as_ptr(),
2449+
list.as_mut_ptr().cast::<ffi::c_char>(),
2450+
list.len(),
2451+
))
24482452
}
24492453

24502454
#[cfg(apple)]
24512455
unsafe {
24522456
ret_usize(c::listxattr(
24532457
path.as_ptr(),
2454-
list.as_mut_ptr(),
2458+
list.as_mut_ptr().cast::<ffi::c_char>(),
24552459
list.len(),
24562460
0,
24572461
))
24582462
}
24592463
}
24602464

24612465
#[cfg(any(apple, linux_kernel, target_os = "hurd"))]
2462-
pub(crate) fn llistxattr(path: &CStr, list: &mut [ffi::c_char]) -> io::Result<usize> {
2466+
pub(crate) fn llistxattr(path: &CStr, list: &mut [u8]) -> io::Result<usize> {
24632467
#[cfg(not(apple))]
24642468
unsafe {
2465-
ret_usize(c::llistxattr(path.as_ptr(), list.as_mut_ptr(), list.len()))
2469+
ret_usize(c::llistxattr(
2470+
path.as_ptr(),
2471+
list.as_mut_ptr().cast::<ffi::c_char>(),
2472+
list.len(),
2473+
))
24662474
}
24672475

24682476
#[cfg(apple)]
24692477
unsafe {
24702478
ret_usize(c::listxattr(
24712479
path.as_ptr(),
2472-
list.as_mut_ptr(),
2480+
list.as_mut_ptr().cast::<ffi::c_char>(),
24732481
list.len(),
24742482
c::XATTR_NOFOLLOW,
24752483
))
24762484
}
24772485
}
24782486

24792487
#[cfg(any(apple, linux_kernel, target_os = "hurd"))]
2480-
pub(crate) fn flistxattr(fd: BorrowedFd<'_>, list: &mut [ffi::c_char]) -> io::Result<usize> {
2488+
pub(crate) fn flistxattr(fd: BorrowedFd<'_>, list: &mut [u8]) -> io::Result<usize> {
24812489
let fd = borrowed_fd(fd);
24822490

24832491
#[cfg(not(apple))]
24842492
unsafe {
2485-
ret_usize(c::flistxattr(fd, list.as_mut_ptr(), list.len()))
2493+
ret_usize(c::flistxattr(
2494+
fd,
2495+
list.as_mut_ptr().cast::<ffi::c_char>(),
2496+
list.len(),
2497+
))
24862498
}
24872499

24882500
#[cfg(apple)]
24892501
unsafe {
2490-
ret_usize(c::flistxattr(fd, list.as_mut_ptr(), list.len(), 0))
2502+
ret_usize(c::flistxattr(
2503+
fd,
2504+
list.as_mut_ptr().cast::<ffi::c_char>(),
2505+
list.len(),
2506+
0,
2507+
))
24912508
}
24922509
}
24932510

src/backend/linux_raw/fs/syscalls.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ use crate::backend::conv::{loff_t, loff_t_from_u64, ret_u64};
3131
))]
3232
use crate::fd::AsFd;
3333
use crate::fd::{BorrowedFd, OwnedFd};
34-
use crate::ffi::{self, CStr};
34+
use crate::ffi::CStr;
3535
#[cfg(any(target_arch = "aarch64", target_arch = "riscv64"))]
3636
use crate::fs::CWD;
3737
use crate::fs::{
@@ -1628,19 +1628,19 @@ pub(crate) fn fsetxattr(
16281628
}
16291629

16301630
#[inline]
1631-
pub(crate) fn listxattr(path: &CStr, list: &mut [ffi::c_char]) -> io::Result<usize> {
1631+
pub(crate) fn listxattr(path: &CStr, list: &mut [u8]) -> io::Result<usize> {
16321632
let (list_addr_mut, list_len) = slice_mut(list);
16331633
unsafe { ret_usize(syscall!(__NR_listxattr, path, list_addr_mut, list_len)) }
16341634
}
16351635

16361636
#[inline]
1637-
pub(crate) fn llistxattr(path: &CStr, list: &mut [ffi::c_char]) -> io::Result<usize> {
1637+
pub(crate) fn llistxattr(path: &CStr, list: &mut [u8]) -> io::Result<usize> {
16381638
let (list_addr_mut, list_len) = slice_mut(list);
16391639
unsafe { ret_usize(syscall!(__NR_llistxattr, path, list_addr_mut, list_len)) }
16401640
}
16411641

16421642
#[inline]
1643-
pub(crate) fn flistxattr(fd: BorrowedFd<'_>, list: &mut [ffi::c_char]) -> io::Result<usize> {
1643+
pub(crate) fn flistxattr(fd: BorrowedFd<'_>, list: &mut [u8]) -> io::Result<usize> {
16441644
let (list_addr_mut, list_len) = slice_mut(list);
16451645
unsafe { ret_usize(syscall!(__NR_flistxattr, fd, list_addr_mut, list_len)) }
16461646
}

src/fs/xattr.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ pub fn fsetxattr<Fd: AsFd, Name: path::Arg>(
137137
///
138138
/// [Linux]: https://man7.org/linux/man-pages/man2/listxattr.2.html
139139
#[inline]
140-
pub fn listxattr<P: path::Arg>(path: P, list: &mut [ffi::c_char]) -> io::Result<usize> {
140+
pub fn listxattr<P: path::Arg>(path: P, list: &mut [u8]) -> io::Result<usize> {
141141
path.into_with_c_str(|path| backend::fs::syscalls::listxattr(path, list))
142142
}
143143

@@ -149,7 +149,7 @@ pub fn listxattr<P: path::Arg>(path: P, list: &mut [ffi::c_char]) -> io::Result<
149149
///
150150
/// [Linux]: https://man7.org/linux/man-pages/man2/llistxattr.2.html
151151
#[inline]
152-
pub fn llistxattr<P: path::Arg>(path: P, list: &mut [ffi::c_char]) -> io::Result<usize> {
152+
pub fn llistxattr<P: path::Arg>(path: P, list: &mut [u8]) -> io::Result<usize> {
153153
path.into_with_c_str(|path| backend::fs::syscalls::llistxattr(path, list))
154154
}
155155

@@ -161,7 +161,7 @@ pub fn llistxattr<P: path::Arg>(path: P, list: &mut [ffi::c_char]) -> io::Result
161161
///
162162
/// [Linux]: https://man7.org/linux/man-pages/man2/flistxattr.2.html
163163
#[inline]
164-
pub fn flistxattr<Fd: AsFd>(fd: Fd, list: &mut [ffi::c_char]) -> io::Result<usize> {
164+
pub fn flistxattr<Fd: AsFd>(fd: Fd, list: &mut [u8]) -> io::Result<usize> {
165165
backend::fs::syscalls::flistxattr(fd.as_fd(), list)
166166
}
167167

0 commit comments

Comments
 (0)