From: Richard D. <ric...@us...> - 2006-10-02 20:05:27
|
Update of /cvsroot/file-extattr/File-ExtAttr In directory sc8-pr-cvs5.sourceforge.net:/tmp/cvs-serv17403 Modified Files: extattr_bsd.c extattr_linux.c extattr_macosx.c extattr_macosx.h extattr_solaris.c flags.c flags.h Log Message: Add prototype Mac OS X support for listxattrns; factor out common code for ns for Solaris & Mac OS X Index: extattr_linux.c =================================================================== RCS file: /cvsroot/file-extattr/File-ExtAttr/extattr_linux.c,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** extattr_linux.c 1 Oct 2006 11:18:54 -0000 1.5 --- extattr_linux.c 2 Oct 2006 20:05:22 -0000 1.6 *************** *** 44,48 **** flags2namespace (struct hv *flags) { ! static const char NAMESPACE_DEFAULT[] = "user"; const size_t NAMESPACE_KEYLEN = strlen(NAMESPACE_KEY); SV **psv_ns; --- 44,48 ---- flags2namespace (struct hv *flags) { ! const char *NAMESPACE_DEFAULT = NAMESPACE_USER; const size_t NAMESPACE_KEYLEN = strlen(NAMESPACE_KEY); SV **psv_ns; Index: extattr_macosx.c =================================================================== RCS file: /cvsroot/file-extattr/File-ExtAttr/extattr_macosx.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** extattr_macosx.c 1 Oct 2006 08:18:49 -0000 1.1 --- extattr_macosx.c 2 Oct 2006 20:05:22 -0000 1.2 *************** *** 181,183 **** --- 181,211 ---- } + ssize_t + macosx_listxattrns (const char *path, + char *buf, + const size_t buflen, + struct hv *flags) + { + ssize_t ret = listxattr(path, NULL, 0, 0 /* XXX: flags? */); + + if (ret > 0) + ret = File_ExtAttr_default_listxattrns(buf, buflen); + + return ret; + } + + ssize_t + macosx_flistxattrns (const int fd, + char *buf, + const size_t buflen, + struct hv *flags) + { + ssize_t ret = flistxattr(fd, NULL, 0, 0 /* XXX: flags? */); + + if (ret > 0) + ret = File_ExtAttr_default_listxattrns(buf, buflen); + + return ret; + } + #endif /* EXTATTR_MACOSX */ Index: extattr_solaris.c =================================================================== RCS file: /cvsroot/file-extattr/File-ExtAttr/extattr_solaris.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** extattr_solaris.c 2 Oct 2006 19:53:06 -0000 1.6 --- extattr_solaris.c 2 Oct 2006 20:05:22 -0000 1.7 *************** *** 202,236 **** } - /* - * Solaris doesn't support namespacing attributes. So if there are - * any attributes, return the namespace "user". - */ - static - ssize_t listxattrns (const int attrdirfd, char *buf, const size_t buflen) - { - ssize_t ret = hasattrclose(attrdirfd); - if (ret > 0) - { - static const char NAMESPACE_USER[] = "user"; - - if (buflen >= sizeof(NAMESPACE_USER)) - { - memcpy(buf, NAMESPACE_USER, sizeof(NAMESPACE_USER)); - ret = sizeof(NAMESPACE_USER); - } - else if (buflen == 0) - { - ret = sizeof(NAMESPACE_USER); - } - else - { - ret = -1; - errno = ERANGE; - } - } - - return ret; - } - int solaris_setxattr (const char *path, --- 202,205 ---- *************** *** 435,440 **** struct hv *flags) { ! int attrdirfd = attropen(path, ".", O_RDONLY); ! return listxattrns(attrdirfd, buf, buflen); } --- 404,416 ---- struct hv *flags) { ! int attrdirfd; ! ssize_t ret; ! ! attrdirfd = attropen(path, ".", O_RDONLY); ! ret = hasattrclose(attrdirfd); ! if (ret > 0) ! ret = File_ExtAttr_default_listxattrns(buf, buflen); ! ! return ret; } *************** *** 444,449 **** struct hv *flags) { ! int attrdirfd = openat(fd, ".", O_RDONLY|O_XATTR); ! return listxattrns(attrdirfd, buf, buflen); } --- 420,432 ---- struct hv *flags) { ! int attrdirfd; ! ssize_t ret; ! ! attrdirfd = openat(fd, ".", O_RDONLY|O_XATTR); ! ret = hasattrclose(attrdirfd); ! if (ret > 0) ! ret = File_ExtAttr_default_listxattrns(buf, buflen); ! ! return ret; } Index: extattr_macosx.h =================================================================== RCS file: /cvsroot/file-extattr/File-ExtAttr/extattr_macosx.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** extattr_macosx.h 1 Oct 2006 08:18:49 -0000 1.2 --- extattr_macosx.h 2 Oct 2006 20:05:22 -0000 1.3 *************** *** 49,51 **** --- 49,61 ---- struct hv *flags); + ssize_t macosx_listxattrns (const char *path, + char *buf, + const size_t buflen, + struct hv *flags); + + ssize_t macosx_flistxattrns (const int fd, + char *buf, + const size_t buflen, + struct hv *flags); + #endif /* EXTATTR_MACOSX_H */ Index: flags.c =================================================================== RCS file: /cvsroot/file-extattr/File-ExtAttr/flags.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** flags.c 1 Oct 2006 08:02:49 -0000 1.2 --- flags.c 2 Oct 2006 20:05:22 -0000 1.3 *************** *** 59,63 **** if (len) ! ok = (memcmp("user", s, len) == 0); else ok = 0; --- 59,63 ---- if (len) ! ok = (memcmp(NAMESPACE_USER, s, len) == 0); else ok = 0; *************** *** 67,68 **** --- 67,96 ---- return ok; } + + /* + * Mac OS X and Solaris doesn't support namespacing attributes. + * So if there are any attributes, call this function, + * to return the namespace "user". + */ + ssize_t + File_ExtAttr_default_listxattrns (char *buf, const size_t buflen) + { + ssize_t ret = 0; + + if (buflen >= sizeof(NAMESPACE_USER)) + { + memcpy(buf, NAMESPACE_USER, sizeof(NAMESPACE_USER)); + ret = sizeof(NAMESPACE_USER); + } + else if (buflen == 0) + { + ret = sizeof(NAMESPACE_USER); + } + else + { + ret = -1; + errno = ERANGE; + } + + return ret; + } Index: extattr_bsd.c =================================================================== RCS file: /cvsroot/file-extattr/File-ExtAttr/extattr_bsd.c,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** extattr_bsd.c 30 Sep 2006 22:10:12 -0000 1.3 --- extattr_bsd.c 2 Oct 2006 20:05:22 -0000 1.4 *************** *** 11,17 **** #include "flags.h" - static const char NAMESPACE_USER[] = "user"; - static const char NAMESPACE_SYSTEM[] = "system"; - static int valid_namespace (struct hv *flags, int *pattrnamespace) --- 11,14 ---- Index: flags.h =================================================================== RCS file: /cvsroot/file-extattr/File-ExtAttr/flags.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** flags.h 1 Oct 2006 08:02:49 -0000 1.3 --- flags.h 2 Oct 2006 20:05:22 -0000 1.4 *************** *** 2,5 **** --- 2,7 ---- #define EXTATTR_FLAGS_H + #include <stddef.h> + struct hv; *************** *** 12,15 **** --- 14,20 ---- static const char NAMESPACE_KEY[] = "namespace"; + static const char NAMESPACE_USER[] = "user"; + static const char NAMESPACE_SYSTEM[] = "system"; + static const char CREATE_KEY[] = "create"; static const char REPLACE_KEY[] = "replace"; *************** *** 17,20 **** --- 22,26 ---- File_ExtAttr_setflags_t File_ExtAttr_flags2setflags (struct hv *flags); int File_ExtAttr_valid_default_namespace (struct hv *flags); + ssize_t File_ExtAttr_default_listxattrns (char *buf, const size_t buflen); #endif /* EXTATTR_FLAGS_H */ |