From: Richard D. <ric...@us...> - 2006-10-01 08:24:46
|
Update of /cvsroot/file-extattr/File-ExtAttr In directory sc8-pr-cvs5.sourceforge.net:/tmp/cvs-serv4447 Modified Files: extattr_macosx.h portable.h Changes Added Files: extattr_macosx.c Log Message: Namespace & flag checking for Mac OS X Index: portable.h =================================================================== RCS file: /cvsroot/file-extattr/File-ExtAttr/portable.h,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** portable.h 30 Sep 2006 22:10:12 -0000 1.10 --- portable.h 1 Oct 2006 08:18:49 -0000 1.11 *************** *** 16,20 **** { #ifdef EXTATTR_MACOSX ! return setxattr(path, attrname, attrvalue, slen, 0 /* XXX: flags? */); #elif defined(EXTATTR_BSD) return bsd_setxattr(path, attrname, attrvalue, slen, flags); --- 16,20 ---- { #ifdef EXTATTR_MACOSX ! return macosx_setxattr(path, attrname, attrvalue, slen, flags); #elif defined(EXTATTR_BSD) return bsd_setxattr(path, attrname, attrvalue, slen, flags); *************** *** 34,38 **** { #ifdef EXTATTR_MACOSX ! return fsetxattr(fd, attrname, attrvalue, slen, 0 /* XXX: flags? */); #elif defined(EXTATTR_BSD) return bsd_fsetxattr(fd, attrname, attrvalue, slen, flags); --- 34,38 ---- { #ifdef EXTATTR_MACOSX ! return macosx_fsetxattr(fd, attrname, attrvalue, slen, flags); #elif defined(EXTATTR_BSD) return bsd_fsetxattr(fd, attrname, attrvalue, slen, flags); *************** *** 52,56 **** { #ifdef EXTATTR_MACOSX ! return getxattr(path, attrname, attrvalue, slen, 0, 0 /* XXX: flags? */); #elif defined(EXTATTR_BSD) return bsd_getxattr(path, attrname, attrvalue, slen, flags); --- 52,56 ---- { #ifdef EXTATTR_MACOSX ! return macosx_getxattr(path, attrname, attrvalue, slen, flags); #elif defined(EXTATTR_BSD) return bsd_getxattr(path, attrname, attrvalue, slen, flags); *************** *** 70,74 **** { #ifdef EXTATTR_MACOSX ! return fgetxattr(fd, attrname, attrvalue, slen, 0, 0 /* XXX: flags? */); #elif defined(EXTATTR_BSD) return bsd_fgetxattr(fd, attrname, attrvalue, slen, flags); --- 70,74 ---- { #ifdef EXTATTR_MACOSX ! return macosx_fgetxattr(fd, attrname, attrvalue, slen, flags); #elif defined(EXTATTR_BSD) return bsd_fgetxattr(fd, attrname, attrvalue, slen, flags); *************** *** 108,112 **** { #ifdef EXTATTR_MACOSX ! return removexattr(path, name, 0 /* XXX: flags? */); #elif defined(EXTATTR_BSD) return bsd_removexattr(path, name, flags); --- 108,112 ---- { #ifdef EXTATTR_MACOSX ! return macosx_removexattr(path, name, flags); #elif defined(EXTATTR_BSD) return bsd_removexattr(path, name, flags); *************** *** 122,126 **** { #ifdef EXTATTR_MACOSX ! return fremovexattr(fd, name, 0 /* XXX: flags? */); #elif defined(EXTATTR_BSD) return bsd_fremovexattr(fd, name, flags); --- 122,126 ---- { #ifdef EXTATTR_MACOSX ! return macosx_fremovexattr(fd, name, flags); #elif defined(EXTATTR_BSD) return bsd_fremovexattr(fd, name, flags); *************** *** 139,143 **** { #ifdef EXTATTR_MACOSX ! return listxattr(path, buf, slen, 0 /* XXX: flags? */); #elif defined(EXTATTR_BSD) return bsd_listxattr(path, buf, slen, flags); --- 139,143 ---- { #ifdef EXTATTR_MACOSX ! return macosx_listxattr(path, buf, slen, flags); #elif defined(EXTATTR_BSD) return bsd_listxattr(path, buf, slen, flags); *************** *** 156,160 **** { #ifdef EXTATTR_MACOSX ! return flistxattr(fd, buf, slen, 0 /* XXX: flags? */); #elif defined(EXTATTR_BSD) return bsd_flistxattr(fd, buf, slen, flags); --- 156,160 ---- { #ifdef EXTATTR_MACOSX ! return macosx_flistxattr(fd, buf, slen, flags); #elif defined(EXTATTR_BSD) return bsd_flistxattr(fd, buf, slen, flags); Index: extattr_macosx.h =================================================================== RCS file: /cvsroot/file-extattr/File-ExtAttr/extattr_macosx.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** extattr_macosx.h 14 Aug 2006 21:10:54 -0000 1.1 --- extattr_macosx.h 1 Oct 2006 08:18:49 -0000 1.2 *************** *** 5,7 **** --- 5,51 ---- #include <sys/xattr.h> + struct hv; + + int macosx_setxattr (const char *path, + const char *attrname, + const char *attrvalue, + const size_t slen, + struct hv *flags); + + int macosx_fsetxattr (const int fd, + const char *attrname, + const char *attrvalue, + const size_t slen, + struct hv *flags); + + int macosx_getxattr (const char *path, + const char *attrname, + void *attrvalue, + const size_t slen, + struct hv *flags); + + int macosx_fgetxattr (const int fd, + const char *attrname, + void *attrvalue, + const size_t slen, + struct hv *flags); + + int macosx_removexattr (const char *path, + const char *attrname, + struct hv *flags); + + int macosx_fremovexattr (const int fd, + const char *attrname, + struct hv *flags); + + ssize_t macosx_listxattr (const char *path, + char *buf, + const size_t buflen, + struct hv *flags); + + ssize_t macosx_flistxattr (const int fd, + char *buf, + const size_t buflen, + struct hv *flags); + #endif /* EXTATTR_MACOSX_H */ Index: Changes =================================================================== RCS file: /cvsroot/file-extattr/File-ExtAttr/Changes,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** Changes 28 Aug 2006 11:45:39 -0000 1.18 --- Changes 1 Oct 2006 08:18:49 -0000 1.19 *************** *** 7,10 **** --- 7,11 ---- are now passed via a hash. This breaks API compatibility. There should be no further API changes. + NOTE: This has not been tested on Mac OS X. 0.05 2006-05-27 --- NEW FILE: extattr_macosx.c --- #include "extattr_os.h" #ifdef EXTATTR_MACOSX #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "flags.h" int macosx_setxattr (const char *path, const char *attrname, const char *attrvalue, const size_t slen, struct hv *flags) { int ok = 1; File_ExtAttr_setflags_t setflags = 0; int xflags = 0; int ret = -1; setflags = File_ExtAttr_flags2setflags(flags); switch (setflags) { case SET_CREATEIFNEEDED: break; case SET_CREATE: xflags |= XATTR_CREATE; break; case SET_REPLACE: xflags |= XATTR_REPLACE; break; } if (!File_ExtAttr_valid_default_namespace(flags)) { errno = ENOATTR; ok = 0; } if (ok) ret = setxattr(path, attrname, attrvalue, slen, xflags); return ok ? ret : -1; } int macosx_fsetxattr (const int fd, const char *attrname, const char *attrvalue, const size_t slen, struct hv *flags) { int ok = 1; File_ExtAttr_setflags_t setflags; int xflags = 0; int ret = -1; setflags = File_ExtAttr_flags2setflags(flags); switch (setflags) { case SET_CREATEIFNEEDED: break; case SET_CREATE: xflags |= XATTR_CREATE; break; case SET_REPLACE: xflags |= XATTR_REPLACE; break; } if (!File_ExtAttr_valid_default_namespace(flags)) { errno = ENOATTR; ok = 0; } if (ok) ret = fsetxattr(fd, attrname, attrvalue, slen, xflags); return ok ? ret : -1; } int macosx_getxattr (const char *path, const char *attrname, void *attrvalue, const size_t slen, struct hv *flags) { int ok = 1; int xflags = 0; int ret = -1; if (!File_ExtAttr_valid_default_namespace(flags)) { errno = ENOATTR; ok = 0; } if (ok) ret = getxattr(path, attrname, attrvalue, slen, 0, xflags); return ok ? ret : - 1; } int macosx_fgetxattr (const int fd, const char *attrname, void *attrvalue, const size_t slen, struct hv *flags) { int ok = 1; int xflags = 0; int ret = -1; if (!File_ExtAttr_valid_default_namespace(flags)) { errno = ENOATTR; ok = 0; } if (ok) ret = fgetxattr(fd, attrname, attrvalue, slen, 0, xflags); return ok ? ret : -1; } int macosx_removexattr (const char *path, const char *attrname, struct hv *flags) { int ok = 1; int xflags = 0; int ret = -1; if (!File_ExtAttr_valid_default_namespace(flags)) { errno = ENOATTR; ok = 0; } if (ok) ret = removexattr(path, attrname, xflags); return ok ? ret : -1; } int macosx_fremovexattr (const int fd, const char *attrname, struct hv *flags) { int ok = 1; int xflags = 0; int ret = -1; if (!File_ExtAttr_valid_default_namespace(flags)) { errno = ENOATTR; ok = 0; } if (ok) ret = fremovexattr(fd, attrname, xflags); return ok ? ret : -1; } ssize_t macosx_listxattr (const char *path, char *buf, const size_t buflen, struct hv *flags) { /* FIXME */ return listxattr(path, buf, buflen, 0 /* XXX: flags? */); } ssize_t macosx_flistxattr (const int fd, char *buf, const size_t buflen, struct hv *flags) { /* FIXME */ return flistxattr(fd, buf, buflen, 0 /* XXX: flags? */); } #endif /* EXTATTR_MACOSX */ |