From 98701e85730391501e100419ab3aeb7dd77055d2 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Wed, 22 Dec 2004 19:53:11 +0000 Subject: Patch from psm, vapier, and solar, adding xattr syscalls --- libc/sysdeps/linux/common/Makefile | 6 +- libc/sysdeps/linux/common/xattr.c | 118 ++++++++++++++++++++++++++++++++----- 2 files changed, 105 insertions(+), 19 deletions(-) diff --git a/libc/sysdeps/linux/common/Makefile b/libc/sysdeps/linux/common/Makefile index ddd015f7c..56a65797d 100644 --- a/libc/sysdeps/linux/common/Makefile +++ b/libc/sysdeps/linux/common/Makefile @@ -52,7 +52,7 @@ CSRC= __rt_sigtimedwait.c __socketcall.c __syscall_fcntl.c \ sysinfo.c time.c times.c truncate.c truncate64.c ulimit.c \ umask.c umount.c umount2.c uname.c unlink.c uselib.c ustat.c \ utime.c utimes.c vfork.c vhangup.c wait.c wait3.c wait4.c \ - waitpid.c write.c writev.c xstatconv.c + waitpid.c write.c writev.c xattr.c xstatconv.c ifneq ($(strip $(EXCLUDE_BRK)),y) CSRC+=sbrk.c @@ -61,10 +61,6 @@ ifeq ($(strip $(UCLIBC_PROPOLICE)),y) CSRC+=ssp.c endif -ifeq ($(strip $(UCLIBC_XATTR)),y) -CSRC+=xattr.c -endif - COBJS=$(patsubst %.c,%.o, $(CSRC)) OBJ=$(COBJS) $(MOBJ) diff --git a/libc/sysdeps/linux/common/xattr.c b/libc/sysdeps/linux/common/xattr.c index c5aa69be3..556cd1a57 100644 --- a/libc/sysdeps/linux/common/xattr.c +++ b/libc/sysdeps/linux/common/xattr.c @@ -1,6 +1,6 @@ /* * Distributed under the terms of the GNU General Public License v2 - * $Header: /var/cvs/uClibc/libc/sysdeps/linux/common/xattr.c,v 1.1 2004/12/20 00:10:51 solar Exp $ + * $Header: /var/cvs/uClibc/libc/sysdeps/linux/common/xattr.c,v 1.2 2004/12/22 19:53:11 andersen Exp $ * * This file provides the following Extended Attribute system calls to uClibc. * @@ -9,63 +9,153 @@ * listxattr(), llistxattr(), flistxattr(), * removexattr(), lremovexattr(), fremovexattr() * - * 20041215 - + * Dec 2004 - + */ + +/* Taken from the manpage. + * On success, a positive number is returned indicating the size of the + * extended attribute name list. On failure, -1 is returned and errno + * is set appropriately. If extended attributes are not supported by the + * filesystem, or are disabled, errno is set to ENOSYS. */ #include "syscalls.h" #include +/* sets */ #ifdef __NR_setxattr -_syscall5(int, setxattr, const char *, path, const char *, name, const void *, - value, size_t, size, int, flags); +_syscall5(int, setxattr, const char *, path, const char *, name, + const void *, value, size_t, size, int, flags); +#else +int setxattr(__const char *__path, __const char *__name, + __const void *__value, size_t __size, int __flags) +{ + __set_errno(ENOSYS); + return -1; +} #endif #ifdef __NR_lsetxattr -_syscall5(int, lsetxattr, const char *, path, const char *, name, const void *, - value, size_t, size, int, flags); +_syscall5(int, lsetxattr, const char *, path, const char *, name, + const void *, value, size_t, size, int, flags); +#else +int lsetxattr(__const char *__path, __const char *__name, + __const void *__value, size_t __size, int __flags) +{ + __set_errno(ENOSYS); + return -1; +} #endif #ifdef __NR_fsetxattr _syscall5(int, fsetxattr, int, filedes, const char *, name, const void *, - value, size_t, size, int, flags); + value, size_t, size, int, flags); +#else +int fsetxattr(int __fd, __const char *__name, __const void *__value, + size_t __size, int __flags) +{ + __set_errno(ENOSYS); + return -1; +} #endif +/* gets */ #ifdef __NR_getxattr _syscall4(ssize_t, getxattr, const char *, path, const char *, name, - void *, value, size_t, size); + void *, value, size_t, size); +#else +ssize_t getxattr(__const char *__path, __const char *__name, void *__value, + size_t __size) +{ + __set_errno(ENOSYS); + return -1; +} #endif #ifdef __NR_lgetxattr -_syscall4(ssize_t, lgetxattr, const char *, path, const char *, name, void *, - value, size_t, size); +_syscall4(ssize_t, lgetxattr, const char *, path, const char *, name, + void *, value, size_t, size); +#else +ssize_t lgetxattr(__const char *__path, __const char *__name, + void *__value, size_t __size) +{ + __set_errno(ENOSYS); + return -1; +} #endif #ifdef __NR_fgetxattr -_syscall4(ssize_t, fgetxattr, int, filedes, const char *, name, void *, value, - size_t, size); +_syscall4(ssize_t, fgetxattr, int, filedes, const char *, name, void *, + value, size_t, size); +#else +ssize_t fgetxattr(int __fd, __const char *__name, void *__value, + size_t __size) +{ + __set_errno(ENOSYS); + return -1; +} #endif +/* list */ #ifdef __NR_listxattr -_syscall3(ssize_t, listxattr, const char *, path, char *, list, size_t, size); +_syscall3(ssize_t, listxattr, const char *, path, char *, list, size_t, + size); +#else +ssize_t listxattr(__const char *__path, char *__list, size_t __size) +{ + __set_errno(ENOSYS); + return -1; +} #endif #ifdef __NR_llistxattr _syscall3(ssize_t, llistxattr, const char *, path, char *, list, size_t, - size); + size); +#else +ssize_t llistxattr(__const char *__path, char *__list, size_t __size) +{ + __set_errno(ENOSYS); + return -1; +} #endif #ifdef __NR_flistxattr _syscall3(size_t, flistxattr, int, filedes, char *, list, size_t, size); +#else +ssize_t flistxattr(int __fd, char *__list, size_t __size) +{ + __set_errno(ENOSYS); + return -1; +} #endif +/* remove */ #ifdef __NR_removexattr _syscall2(int, removexattr, const char *, path, const char *, name); +#else +int removexattr(__const char *__path, __const char *__name) +{ + __set_errno(ENOSYS); + return -1; +} #endif #ifdef __NR_lremovexattr _syscall2(int, lremovexattr, const char *, path, const char *, name); +#else +int lremovexattr(__const char *__path, __const char *__name) +{ + __set_errno(ENOSYS); + return -1; +} #endif #ifdef __NR_fremovexattr _syscall2(int, fremovexattr, int, filedes, const char *, name); +#else +int fremovexattr(int __fd, __const char *__name) +{ + __set_errno(ENOSYS); + return -1; +} #endif -- cgit v1.2.3