bsd-user: Implement do_freebsd_realpathat syscall
Signed-off-by: Mikaël Urankar <mikael.urankar@gmail.com> Signed-off-by: Karim Taha <kariem.taha2.7@gmail.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Warner Losh <imp@bsdimp.com>
This commit is contained in:
parent
292f00c05b
commit
292bfd0f51
@ -634,4 +634,30 @@ static inline abi_long do_freebsd_fcntl(abi_long arg1, abi_long arg2,
|
||||
return ret;
|
||||
}
|
||||
|
||||
#if defined(__FreeBSD_version) && __FreeBSD_version >= 1300080
|
||||
extern int __realpathat(int fd, const char *path, char *buf, size_t size,
|
||||
int flags);
|
||||
/* https://svnweb.freebsd.org/base?view=revision&revision=358172 */
|
||||
/* no man page */
|
||||
static inline abi_long do_freebsd_realpathat(abi_long arg1, abi_long arg2,
|
||||
abi_long arg3, abi_long arg4, abi_long arg5)
|
||||
{
|
||||
abi_long ret;
|
||||
void *p, *b;
|
||||
|
||||
LOCK_PATH(p, arg2);
|
||||
b = lock_user(VERIFY_WRITE, arg3, arg4, 0);
|
||||
if (b == NULL) {
|
||||
UNLOCK_PATH(p, arg2);
|
||||
return -TARGET_EFAULT;
|
||||
}
|
||||
|
||||
ret = get_errno(__realpathat(arg1, p, b, arg4, arg5));
|
||||
UNLOCK_PATH(p, arg2);
|
||||
unlock_user(b, arg3, ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* BSD_USER_FREEBSD_OS_STAT_H */
|
||||
|
Loading…
Reference in New Issue
Block a user