Revision 30297b55
b/linux-user/syscall.c | ||
---|---|---|
7796 | 7796 |
#endif |
7797 | 7797 |
#ifdef CONFIG_ATTR |
7798 | 7798 |
#ifdef TARGET_NR_setxattr |
7799 |
case TARGET_NR_lsetxattr: |
|
7800 |
case TARGET_NR_fsetxattr: |
|
7801 |
case TARGET_NR_lgetxattr: |
|
7802 |
case TARGET_NR_fgetxattr: |
|
7803 | 7799 |
case TARGET_NR_listxattr: |
7804 | 7800 |
case TARGET_NR_llistxattr: |
7805 | 7801 |
case TARGET_NR_flistxattr: |
7806 |
case TARGET_NR_lremovexattr: |
|
7807 |
case TARGET_NR_fremovexattr: |
|
7808 | 7802 |
ret = -TARGET_EOPNOTSUPP; |
7809 | 7803 |
break; |
7810 | 7804 |
case TARGET_NR_setxattr: |
7805 |
case TARGET_NR_lsetxattr: |
|
7811 | 7806 |
{ |
7812 | 7807 |
void *p, *n, *v = 0; |
7813 | 7808 |
if (arg3) { |
... | ... | |
7820 | 7815 |
p = lock_user_string(arg1); |
7821 | 7816 |
n = lock_user_string(arg2); |
7822 | 7817 |
if (p && n) { |
7823 |
ret = get_errno(setxattr(p, n, v, arg4, arg5)); |
|
7818 |
if (num == TARGET_NR_setxattr) { |
|
7819 |
ret = get_errno(setxattr(p, n, v, arg4, arg5)); |
|
7820 |
} else { |
|
7821 |
ret = get_errno(lsetxattr(p, n, v, arg4, arg5)); |
|
7822 |
} |
|
7824 | 7823 |
} else { |
7825 | 7824 |
ret = -TARGET_EFAULT; |
7826 | 7825 |
} |
... | ... | |
7829 | 7828 |
unlock_user(v, arg3, 0); |
7830 | 7829 |
} |
7831 | 7830 |
break; |
7831 |
case TARGET_NR_fsetxattr: |
|
7832 |
{ |
|
7833 |
void *n, *v = 0; |
|
7834 |
if (arg3) { |
|
7835 |
v = lock_user(VERIFY_READ, arg3, arg4, 1); |
|
7836 |
if (!v) { |
|
7837 |
ret = -TARGET_EFAULT; |
|
7838 |
break; |
|
7839 |
} |
|
7840 |
} |
|
7841 |
n = lock_user_string(arg2); |
|
7842 |
if (n) { |
|
7843 |
ret = get_errno(fsetxattr(arg1, n, v, arg4, arg5)); |
|
7844 |
} else { |
|
7845 |
ret = -TARGET_EFAULT; |
|
7846 |
} |
|
7847 |
unlock_user(n, arg2, 0); |
|
7848 |
unlock_user(v, arg3, 0); |
|
7849 |
} |
|
7850 |
break; |
|
7832 | 7851 |
case TARGET_NR_getxattr: |
7852 |
case TARGET_NR_lgetxattr: |
|
7833 | 7853 |
{ |
7834 | 7854 |
void *p, *n, *v = 0; |
7835 | 7855 |
if (arg3) { |
... | ... | |
7842 | 7862 |
p = lock_user_string(arg1); |
7843 | 7863 |
n = lock_user_string(arg2); |
7844 | 7864 |
if (p && n) { |
7845 |
ret = get_errno(getxattr(p, n, v, arg4)); |
|
7865 |
if (num == TARGET_NR_getxattr) { |
|
7866 |
ret = get_errno(getxattr(p, n, v, arg4)); |
|
7867 |
} else { |
|
7868 |
ret = get_errno(lgetxattr(p, n, v, arg4)); |
|
7869 |
} |
|
7846 | 7870 |
} else { |
7847 | 7871 |
ret = -TARGET_EFAULT; |
7848 | 7872 |
} |
... | ... | |
7851 | 7875 |
unlock_user(v, arg3, arg4); |
7852 | 7876 |
} |
7853 | 7877 |
break; |
7878 |
case TARGET_NR_fgetxattr: |
|
7879 |
{ |
|
7880 |
void *n, *v = 0; |
|
7881 |
if (arg3) { |
|
7882 |
v = lock_user(VERIFY_WRITE, arg3, arg4, 0); |
|
7883 |
if (!v) { |
|
7884 |
ret = -TARGET_EFAULT; |
|
7885 |
break; |
|
7886 |
} |
|
7887 |
} |
|
7888 |
n = lock_user_string(arg2); |
|
7889 |
if (n) { |
|
7890 |
ret = get_errno(fgetxattr(arg1, n, v, arg4)); |
|
7891 |
} else { |
|
7892 |
ret = -TARGET_EFAULT; |
|
7893 |
} |
|
7894 |
unlock_user(n, arg2, 0); |
|
7895 |
unlock_user(v, arg3, arg4); |
|
7896 |
} |
|
7897 |
break; |
|
7854 | 7898 |
case TARGET_NR_removexattr: |
7899 |
case TARGET_NR_lremovexattr: |
|
7855 | 7900 |
{ |
7856 | 7901 |
void *p, *n; |
7857 | 7902 |
p = lock_user_string(arg1); |
7858 | 7903 |
n = lock_user_string(arg2); |
7859 | 7904 |
if (p && n) { |
7860 |
ret = get_errno(removexattr(p, n)); |
|
7905 |
if (num == TARGET_NR_removexattr) { |
|
7906 |
ret = get_errno(removexattr(p, n)); |
|
7907 |
} else { |
|
7908 |
ret = get_errno(lremovexattr(p, n)); |
|
7909 |
} |
|
7861 | 7910 |
} else { |
7862 | 7911 |
ret = -TARGET_EFAULT; |
7863 | 7912 |
} |
... | ... | |
7865 | 7914 |
unlock_user(n, arg2, 0); |
7866 | 7915 |
} |
7867 | 7916 |
break; |
7917 |
case TARGET_NR_fremovexattr: |
|
7918 |
{ |
|
7919 |
void *n; |
|
7920 |
n = lock_user_string(arg2); |
|
7921 |
if (n) { |
|
7922 |
ret = get_errno(fremovexattr(arg1, n)); |
|
7923 |
} else { |
|
7924 |
ret = -TARGET_EFAULT; |
|
7925 |
} |
|
7926 |
unlock_user(n, arg2, 0); |
|
7927 |
} |
|
7928 |
break; |
|
7868 | 7929 |
#endif |
7869 | 7930 |
#endif /* CONFIG_ATTR */ |
7870 | 7931 |
#ifdef TARGET_NR_set_thread_area |
Also available in: Unified diff