Changeset View
Changeset View
Standalone View
Standalone View
sys/compat/linux/linux_file.c
Show First 20 Lines • Show All 276 Lines • ▼ Show 20 Lines | linux_name_to_handle_at(struct thread *td, | ||||
fhandle_t fh; | fhandle_t fh; | ||||
l_uint fh_bytes; | l_uint fh_bytes; | ||||
l_int mount_id; | l_int mount_id; | ||||
int error, fd, bsd_flags; | int error, fd, bsd_flags; | ||||
if (args->flags & ~valid_flags) | if (args->flags & ~valid_flags) | ||||
return (EINVAL); | return (EINVAL); | ||||
if (args->flags & LINUX_AT_EMPTY_PATH) | |||||
/* XXX: not supported yet */ | |||||
return (EOPNOTSUPP); | |||||
fd = args->dirfd; | fd = args->dirfd; | ||||
if (fd == LINUX_AT_FDCWD) | if (fd == LINUX_AT_FDCWD) | ||||
fd = AT_FDCWD; | fd = AT_FDCWD; | ||||
bsd_flags = 0; | bsd_flags = 0; | ||||
if (!(args->flags & LINUX_AT_SYMLINK_FOLLOW)) | if (!(args->flags & LINUX_AT_SYMLINK_FOLLOW)) | ||||
bsd_flags |= AT_SYMLINK_NOFOLLOW; | bsd_flags |= AT_SYMLINK_NOFOLLOW; | ||||
if ((args->flags & LINUX_AT_EMPTY_PATH) != 0) | |||||
bsd_flags |= AT_EMPTY_PATH; | |||||
if (!LUSECONVPATH(td)) { | if (!LUSECONVPATH(td)) { | ||||
error = kern_getfhat(td, bsd_flags, fd, args->name, | error = kern_getfhat(td, bsd_flags, fd, args->name, | ||||
UIO_USERSPACE, &fh, UIO_SYSSPACE); | UIO_USERSPACE, &fh, UIO_SYSSPACE); | ||||
} else { | } else { | ||||
char *path; | char *path; | ||||
LCONVPATH_AT(td, args->name, &path, 0, fd); | LCONVPATH_AT(td, args->name, &path, 0, fd); | ||||
▲ Show 20 Lines • Show All 1,779 Lines • Show Last 20 Lines |