? stage1-arm-uclibc-2004.3.tar.bz2 Index: extra/Configs/Config.in =================================================================== RCS file: /var/cvs/uClibc/extra/Configs/Config.in,v retrieving revision 1.57 diff -u -b -B -w -p -r1.57 Config.in --- extra/Configs/Config.in 6 Oct 2004 07:34:13 -0000 1.57 +++ extra/Configs/Config.in 14 Dec 2004 23:07:13 -0000 @@ -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 y + 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" Index: include/sys/xattr.h =================================================================== RCS file: include/sys/xattr.h diff -N include/sys/xattr.h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ include/sys/xattr.h 14 Dec 2004 23:07:13 -0000 @@ -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 +#include + + +__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 */ Index: libc/sysdeps/linux/common/Makefile =================================================================== RCS file: /var/cvs/uClibc/libc/sysdeps/linux/common/Makefile,v retrieving revision 1.101 diff -u -b -B -w -p -r1.101 Makefile --- libc/sysdeps/linux/common/Makefile 22 Aug 2004 06:04:57 -0000 1.101 +++ libc/sysdeps/linux/common/Makefile 14 Dec 2004 23:07:13 -0000 @@ -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) Index: libc/sysdeps/linux/common/xattr.c =================================================================== RCS file: libc/sysdeps/linux/common/xattr.c diff -N libc/sysdeps/linux/common/xattr.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ libc/sysdeps/linux/common/xattr.c 14 Dec 2004 23:07:13 -0000 @@ -0,0 +1,88 @@ +/* + * Distributed under the terms of the GNU General Public License v2 + * $Header: $ + * + */ + +#include "syscalls.h" +#include + +/* +grep extern /usr/include/sys/xattr.h | awk '{print $3}' + +- 5 args +setxattr +lsetxattr +fsetxattr + +- 4 args +getxattr +lgetxattr +fgetxattr + +- 3 args +listxattr +llistxattr +flistxattr + +- 2 args +removexattr +lremovexattr +fremovexattr + +*/ + +#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