diff options
| -rw-r--r-- | extra/Configs/Config.in | 10 | ||||
| -rw-r--r-- | include/sys/xattr.h | 104 | ||||
| -rw-r--r-- | libc/sysdeps/linux/common/Makefile | 9 | ||||
| -rw-r--r-- | libc/sysdeps/linux/common/mincore.c | 15 | ||||
| -rw-r--r-- | libc/sysdeps/linux/common/xattr.c | 71 | 
5 files changed, 207 insertions, 2 deletions
diff --git a/extra/Configs/Config.in b/extra/Configs/Config.in index 56f794912..6969bdb5e 100644 --- a/extra/Configs/Config.in +++ b/extra/Configs/Config.in @@ -526,6 +526,16 @@ config UCLIBC_TZ_FILE_PATH  	  Most people will use the default of '/etc/TZ'. +config UCLIBC_XATTR +	bool "Extended Attributes" +	default n +	help +	  Extended attributes are name:value pairs associated with inodes (files,  +	  directories, symlinks, etc).  They are extensions to the normal attributes  +	  which are associated with all inodes in the system. +	  Most people should answer N. +	  Selinux users will want to say Y here. +  endmenu  menu "Networking Support" diff --git a/include/sys/xattr.h b/include/sys/xattr.h new file mode 100644 index 000000000..2737f90bd --- /dev/null +++ b/include/sys/xattr.h @@ -0,0 +1,104 @@ +/* Copyright (C) 2002 Free Software Foundation, Inc. +   This file is part of the GNU C Library. + +   The GNU C Library is free software; you can redistribute it and/or +   modify it under the terms of the GNU Lesser General Public +   License as published by the Free Software Foundation; either +   version 2.1 of the License, or (at your option) any later version. + +   The GNU C Library is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +   Lesser General Public License for more details. + +   You should have received a copy of the GNU Lesser General Public +   License along with the GNU C Library; if not, write to the Free +   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +   02111-1307 USA.  */ + +#ifndef _SYS_XATTR_H +#define _SYS_XATTR_H	1 + +#include <features.h> +#include <sys/types.h> + + +__BEGIN_DECLS + +/* The following constants should be used for the fifth parameter of +   `*setxattr'.  */ +enum +{ +  XATTR_CREATE = 1,	/* set value, fail if attr already exists.  */ +#define XATTR_CREATE	XATTR_CREATE +  XATTR_REPLACE = 2	/* set value, fail if attr does not exist.  */ +#define XATTR_REPLACE	XATTR_REPLACE +}; + +/* Set the attribute NAME of the file pointed to by PATH to VALUE (which +   is SIZE bytes long).  Return 0 on success, -1 for errors.  */ +extern int setxattr (__const char *__path, __const char *__name, +		     __const void *__value, size_t __size, int __flags) +	__THROW; + +/* Set the attribute NAME of the file pointed to by PATH to VALUE (which is +   SIZE bytes long), not following symlinks for the last pathname component. +   Return 0 on success, -1 for errors.  */ +extern int lsetxattr (__const char *__path, __const char *__name, +		      __const void *__value, size_t __size, int __flags) +	__THROW; + +/* Set the attribute NAME of the file descriptor FD to VALUE (which is SIZE +   bytes long).  Return 0 on success, -1 for errors.  */ +extern int fsetxattr (int __fd, __const char *__name, __const void *__value, +		      size_t __size, int __flags) __THROW; + +/* Get the attribute NAME of the file pointed to by PATH to VALUE (which is +   SIZE bytes long).  Return 0 on success, -1 for errors.  */ +extern ssize_t getxattr (__const char *__path, __const char *__name, +			 void *__value, size_t __size) __THROW; + +/* Get the attribute NAME of the file pointed to by PATH to VALUE (which is +   SIZE bytes long), not following symlinks for the last pathname component. +   Return 0 on success, -1 for errors.  */ +extern ssize_t lgetxattr (__const char *__path, __const char *__name, +			  void *__value, size_t __size) __THROW; + +/* Get the attribute NAME of the file descriptor FD to VALUE (which is SIZE +   bytes long).  Return 0 on success, -1 for errors.  */ +extern ssize_t fgetxattr (int __fd, __const char *__name, void *__value, +			  size_t __size) __THROW; + +/* List attributes of the file pointed to by PATH into the user-supplied +   buffer LIST (which is SIZE bytes big).  Return 0 on success, -1 for +   errors.  */ +extern ssize_t listxattr (__const char *__path, char *__list, size_t __size) +	__THROW; + +/* List attributes of the file pointed to by PATH into the user-supplied +   buffer LIST (which is SIZE bytes big), not following symlinks for the +   last pathname component.  Return 0 on success, -1 for errors.  */ +extern ssize_t llistxattr (__const char *__path, char *__list, size_t __size) +	__THROW; + +/* List attributes of the file descriptor FD into the user-supplied buffer +   LIST (which is SIZE bytes big).  Return 0 on success, -1 for errors.  */ +extern ssize_t flistxattr (int __fd, char *__list, size_t __size) +	__THROW; + +/* Remove the attribute NAME from the file pointed to by PATH.  Return 0 +   on success, -1 for errors.  */ +extern int removexattr (__const char *__path, __const char *__name) __THROW; + +/* Remove the attribute NAME from the file pointed to by PATH, not +   following symlinks for the last pathname component.  Return 0 on +   success, -1 for errors.  */ +extern int lremovexattr (__const char *__path, __const char *__name) __THROW; + +/* Remove the attribute NAME from the file descriptor FD.  Return 0 on +   success, -1 for errors.  */ +extern int fremovexattr (int __fd, __const char *__name) __THROW; + +__END_DECLS + +#endif	/* sys/xattr.h  */ diff --git a/libc/sysdeps/linux/common/Makefile b/libc/sysdeps/linux/common/Makefile index a6be4307e..ddd015f7c 100644 --- a/libc/sysdeps/linux/common/Makefile +++ b/libc/sysdeps/linux/common/Makefile @@ -32,8 +32,8 @@ CSRC=	__rt_sigtimedwait.c __socketcall.c __syscall_fcntl.c \  	getpgid.c getpgrp.c getpid.c getppid.c getpriority.c getresgid.c \  	getresuid.c getrlimit.c getrlimit64.c getrusage.c getsid.c \  	gettimeofday.c getuid.c init_module.c ioctl.c ioperm.c iopl.c \ -	kill.c klogctl.c lchown.c link.c llseek.c longjmp.c lseek.c \ -	lstat.c lstat64.c madvise.c mkdir.c mkfifo.c mknod.c mlock.c \ +	kill.c klogctl.c lchown.c link.c llseek.c longjmp.c lseek.c lstat.c \ +	lstat64.c madvise.c mkdir.c mkfifo.c mincore.c mknod.c mlock.c \  	mlockall.c mmap.c mmap64.c modify_ldt.c mount.c mprotect.c \  	mremap.c msync.c munlock.c munlockall.c munmap.c nanosleep.c \  	nice.c noophooks.c ntp_gettime.c open.c open64.c pause.c \ @@ -60,6 +60,11 @@ endif  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/mincore.c b/libc/sysdeps/linux/common/mincore.c new file mode 100644 index 000000000..ecae441a5 --- /dev/null +++ b/libc/sysdeps/linux/common/mincore.c @@ -0,0 +1,15 @@ +/*  + * Distributed under the terms of the GNU General Public License v2 + * $Header: /var/cvs/uClibc/libc/sysdeps/linux/common/mincore.c,v 1.1 2004/12/20 00:10:51 solar Exp $ + * + * This file provides the mincore() system call to uClibc. + * 20041215 - <solar@gentoo.org> + * + */ + +#include "syscalls.h" +#include <unistd.h> + +#ifdef __NR_mincore +_syscall3(int, mincore, void *, start, size_t, length, unsigned char *, vec); +#endif diff --git a/libc/sysdeps/linux/common/xattr.c b/libc/sysdeps/linux/common/xattr.c new file mode 100644 index 000000000..c5aa69be3 --- /dev/null +++ b/libc/sysdeps/linux/common/xattr.c @@ -0,0 +1,71 @@ +/*  + * 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 $ + * + * This file provides the following Extended Attribute system calls to uClibc. + * + *	setxattr(), lsetxattr(), fsetxattr(), + *	getxattr(), lgetxattr(), fgetxattr(), + *	listxattr(), llistxattr(), flistxattr(), + *	removexattr(), lremovexattr(), fremovexattr() + * + * 20041215 - <solar@gentoo.org> + */ + +#include "syscalls.h" +#include <unistd.h> + +#ifdef __NR_setxattr +_syscall5(int, setxattr, const char *, path, const char *, name, const void *, +		  value, size_t, size, int, flags); +#endif + +#ifdef __NR_lsetxattr +_syscall5(int, lsetxattr, const char *, path, const char *, name, const void *, +		  value, size_t, size, int, flags); +#endif + +#ifdef __NR_fsetxattr +_syscall5(int, fsetxattr, int, filedes, const char *, name, const void *, +		  value, size_t, size, int, flags); +#endif + +#ifdef __NR_getxattr +_syscall4(ssize_t, getxattr, const char *, path, const char *, name, +		  void *, value, size_t, size); +#endif + +#ifdef __NR_lgetxattr +_syscall4(ssize_t, lgetxattr, const char *, path, const char *, name, void *, +		  value, size_t, size); +#endif + +#ifdef __NR_fgetxattr +_syscall4(ssize_t, fgetxattr, int, filedes, const char *, name, void *, value, +		  size_t, size); +#endif + +#ifdef __NR_listxattr +_syscall3(ssize_t, listxattr, const char *, path, char *, list, size_t, size); +#endif + +#ifdef __NR_llistxattr +_syscall3(ssize_t, llistxattr, const char *, path, char *, list, size_t, +		  size); +#endif + +#ifdef __NR_flistxattr +_syscall3(size_t, flistxattr, int, filedes, char *, list, size_t, size); +#endif + +#ifdef __NR_removexattr +_syscall2(int, removexattr, const char *, path, const char *, name); +#endif + +#ifdef __NR_lremovexattr +_syscall2(int, lremovexattr, const char *, path, const char *, name); +#endif + +#ifdef __NR_fremovexattr +_syscall2(int, fremovexattr, int, filedes, const char *, name); +#endif  | 
