Changeset View
Changeset View
Standalone View
Standalone View
sys/i386/linux/linux_machdep.c
Show First 20 Lines • Show All 709 Lines • ▼ Show 20 Lines | linux_uselib(struct thread *td, struct linux_uselib_args *args) | ||||
struct vnode *vp; | struct vnode *vp; | ||||
struct exec *a_out; | struct exec *a_out; | ||||
vm_map_t map; | vm_map_t map; | ||||
vm_map_entry_t entry; | vm_map_entry_t entry; | ||||
struct vattr attr; | struct vattr attr; | ||||
vm_offset_t vmaddr; | vm_offset_t vmaddr; | ||||
unsigned long file_offset; | unsigned long file_offset; | ||||
unsigned long bss_size; | unsigned long bss_size; | ||||
char *library; | |||||
ssize_t aresid; | ssize_t aresid; | ||||
int error; | int error; | ||||
bool locked, opened, textset; | bool locked, opened, textset; | ||||
a_out = NULL; | a_out = NULL; | ||||
vp = NULL; | vp = NULL; | ||||
locked = false; | locked = false; | ||||
textset = false; | textset = false; | ||||
opened = false; | opened = false; | ||||
if (!LUSECONVPATH(td)) { | |||||
NDINIT(&ni, LOOKUP, ISOPEN | FOLLOW | LOCKLEAF | AUDITVNODE1, | NDINIT(&ni, LOOKUP, ISOPEN | FOLLOW | LOCKLEAF | AUDITVNODE1, | ||||
UIO_USERSPACE, args->library); | UIO_USERSPACE, args->library); | ||||
error = namei(&ni); | error = namei(&ni); | ||||
} else { | |||||
LCONVPATHEXIST(args->library, &library); | |||||
NDINIT(&ni, LOOKUP, ISOPEN | FOLLOW | LOCKLEAF | AUDITVNODE1, | |||||
UIO_SYSSPACE, library); | |||||
error = namei(&ni); | |||||
LFREEPATH(library); | |||||
} | |||||
if (error) | if (error) | ||||
goto cleanup; | goto cleanup; | ||||
vp = ni.ni_vp; | vp = ni.ni_vp; | ||||
NDFREE_PNBUF(&ni); | NDFREE_PNBUF(&ni); | ||||
/* | /* | ||||
* From here on down, we have a locked vnode that must be unlocked. | * From here on down, we have a locked vnode that must be unlocked. | ||||
▲ Show 20 Lines • Show All 207 Lines • Show Last 20 Lines |