linux-user: Implement *listxattr syscalls
Implement listxattr, flistxattr and llistxattr syscalls. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
This commit is contained in:
parent
30297b55f7
commit
fb5590f7f5
@ -7798,9 +7798,43 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
||||
#ifdef TARGET_NR_setxattr
|
||||
case TARGET_NR_listxattr:
|
||||
case TARGET_NR_llistxattr:
|
||||
case TARGET_NR_flistxattr:
|
||||
ret = -TARGET_EOPNOTSUPP;
|
||||
{
|
||||
void *p, *b = 0;
|
||||
if (arg2) {
|
||||
b = lock_user(VERIFY_WRITE, arg2, arg3, 0);
|
||||
if (!b) {
|
||||
ret = -TARGET_EFAULT;
|
||||
break;
|
||||
}
|
||||
}
|
||||
p = lock_user_string(arg1);
|
||||
if (p) {
|
||||
if (num == TARGET_NR_listxattr) {
|
||||
ret = get_errno(listxattr(p, b, arg3));
|
||||
} else {
|
||||
ret = get_errno(llistxattr(p, b, arg3));
|
||||
}
|
||||
} else {
|
||||
ret = -TARGET_EFAULT;
|
||||
}
|
||||
unlock_user(p, arg1, 0);
|
||||
unlock_user(b, arg2, arg3);
|
||||
break;
|
||||
}
|
||||
case TARGET_NR_flistxattr:
|
||||
{
|
||||
void *b = 0;
|
||||
if (arg2) {
|
||||
b = lock_user(VERIFY_WRITE, arg2, arg3, 0);
|
||||
if (!b) {
|
||||
ret = -TARGET_EFAULT;
|
||||
break;
|
||||
}
|
||||
}
|
||||
ret = get_errno(flistxattr(arg1, b, arg3));
|
||||
unlock_user(b, arg2, arg3);
|
||||
break;
|
||||
}
|
||||
case TARGET_NR_setxattr:
|
||||
case TARGET_NR_lsetxattr:
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user