Since statfs & statfs64 implementations are exactly the same, differs only in "64" suffix, merge them into one using a common macro.
Signed-off-by: Michael Tokarev <[email protected]> --- linux-user/syscall.c | 110 ++++++++++++++++--------------------------- 1 file changed, 40 insertions(+), 70 deletions(-) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 1f84c296d5..1b888bccfc 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -10972,80 +10972,50 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1, return ret; case TARGET_NR_setpriority: return get_errno(setpriority(arg1, arg2, arg3)); -#ifdef TARGET_NR_statfs - case TARGET_NR_statfs: - case TARGET_NR_fstatfs: - { - struct statf stfs; - struct target_statfs *target_stfs; - if (num == TARGET_NR_statfs) { - if (!(p = lock_user_string(arg1))) { - return -TARGET_EFAULT; - } - ret = get_errno(statfs(path(p), &stfs)); - unlock_user(p, arg1, 0); - } else /* if (num == TARGET_NR_fstatfs) */ { - ret = get_errno(fstatfs(arg1, &stfs)); - } - if (is_error(ret)) { - return ret; - } - if (!lock_user_struct(VERIFY_WRITE, target_stfs, arg2, 0)) - return -TARGET_EFAULT; - __put_user(stfs.f_type, &target_stfs->f_type); - __put_user(stfs.f_bsize, &target_stfs->f_bsize); - __put_user(stfs.f_blocks, &target_stfs->f_blocks); - __put_user(stfs.f_bfree, &target_stfs->f_bfree); - __put_user(stfs.f_bavail, &target_stfs->f_bavail); - __put_user(stfs.f_files, &target_stfs->f_files); - __put_user(stfs.f_ffree, &target_stfs->f_ffree); - __put_user(stfs.f_fsid.__val[0], &target_stfs->f_fsid.val[0]); - __put_user(stfs.f_fsid.__val[1], &target_stfs->f_fsid.val[1]); - __put_user(stfs.f_namelen, &target_stfs->f_namelen); - __put_user(stfs.f_frsize, &target_stfs->f_frsize); - __put_user(stfs.f_flags, &target_stfs->f_flags); - memset(target_stfs->f_spare, 0, sizeof(target_stfs->f_spare)); - unlock_user_struct(target_stfs, arg2, 1); - return ret; + +#define statfs_fstatfs_impl(variant) /* variant is statfs or statfs64 */ \ + case TARGET_NR_##variant: \ + case TARGET_NR_f##variant: \ + { \ + struct statfs stfs; \ + struct target_##variant *target_stfs; \ + if (num == TARGET_NR_##variant) { \ + if (!(p = lock_user_string(arg1))) { \ + return -TARGET_EFAULT; \ + } \ + ret = get_errno(statfs(path(p), &stfs)); \ + unlock_user(p, arg1, 0); \ + } else /* if (num == TARGET_NR_f##variant) */ { \ + ret = get_errno(fstatfs(arg1, &stfs)); \ + } \ + if (is_error(ret)) { \ + return ret; \ + } \ + if (!lock_user_struct(VERIFY_WRITE, target_stfs, arg2, 0)) \ + return -TARGET_EFAULT; \ + __put_user(stfs.f_type, &target_stfs->f_type); \ + __put_user(stfs.f_bsize, &target_stfs->f_bsize); \ + __put_user(stfs.f_blocks, &target_stfs->f_blocks); \ + __put_user(stfs.f_bfree, &target_stfs->f_bfree); \ + __put_user(stfs.f_bavail, &target_stfs->f_bavail); \ + __put_user(stfs.f_files, &target_stfs->f_files); \ + __put_user(stfs.f_ffree, &target_stfs->f_ffree); \ + __put_user(stfs.f_fsid.__val[0], &target_stfs->f_fsid.val[0]); \ + __put_user(stfs.f_fsid.__val[1], &target_stfs->f_fsid.val[1]); \ + __put_user(stfs.f_namelen, &target_stfs->f_namelen); \ + __put_user(stfs.f_frsize, &target_stfs->f_frsize); \ + __put_user(stfs.f_flags, &target_stfs->f_flags); \ + memset(target_stfs->f_spare, 0, sizeof(target_stfs->f_spare)); \ + unlock_user_struct(target_stfs, arg2, 1); \ + return ret; \ } +#ifdef TARGET_NR_statfs + statfs_fstatfs_impl(statfs); #endif #ifdef TARGET_NR_statfs64 - case TARGET_NR_statfs64: - case TARGET_NR_fstatfs64: - { - struct statfs stfs; - struct target_statfs64 *target_stfs; - if (num == TARGET_NR_statfs64) { - if (!(p = lock_user_string(arg1))) { - return -TARGET_EFAULT; - } - ret = get_errno(statfs(path(p), &stfs)); - unlock_user(p, arg1, 0); - } else /* if (num == TARGET_NR_fstatfs64) */ { - ret = get_errno(fstatfs(arg1, &stfs)); - } - if (is_error(ret)) { - return ret; - } - if (!lock_user_struct(VERIFY_WRITE, target_stfs, arg3, 0)) - return -TARGET_EFAULT; - __put_user(stfs.f_type, &target_stfs->f_type); - __put_user(stfs.f_bsize, &target_stfs->f_bsize); - __put_user(stfs.f_blocks, &target_stfs->f_blocks); - __put_user(stfs.f_bfree, &target_stfs->f_bfree); - __put_user(stfs.f_bavail, &target_stfs->f_bavail); - __put_user(stfs.f_files, &target_stfs->f_files); - __put_user(stfs.f_ffree, &target_stfs->f_ffree); - __put_user(stfs.f_fsid.__val[0], &target_stfs->f_fsid.val[0]); - __put_user(stfs.f_fsid.__val[1], &target_stfs->f_fsid.val[1]); - __put_user(stfs.f_namelen, &target_stfs->f_namelen); - __put_user(stfs.f_frsize, &target_stfs->f_frsize); - __put_user(stfs.f_flags, &target_stfs->f_flags); - memset(target_stfs->f_spare, 0, sizeof(target_stfs->f_spare)); - unlock_user_struct(target_stfs, arg3, 1); - return ret; - } + statfs_fstatfs_impl(statfs64); #endif + #ifdef TARGET_NR_socketcall case TARGET_NR_socketcall: return do_socketcall(arg1, arg2); -- 2.47.3
