X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Facl-internal.h;h=0eb11bc30e1adf3688f85bf440a414f3fea528a1;hb=ddf6704b29173e809f3b0150c015ca282e06388f;hp=fababa634607b08f2516785c10857663fcf9e6ec;hpb=765ede785ea58125c799662bb90440e5c990afa7;p=gnulib.git diff --git a/lib/acl-internal.h b/lib/acl-internal.h index fababa634..0eb11bc30 100644 --- a/lib/acl-internal.h +++ b/lib/acl-internal.h @@ -1,6 +1,6 @@ /* Internal implementation of access control lists. - Copyright (C) 2002-2003, 2005-2008 Free Software Foundation, Inc. + Copyright (C) 2002-2003, 2005-2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -26,7 +26,7 @@ #if HAVE_SYS_ACL_H # include #endif -#if defined HAVE_ACL && ! defined GETACLCNT && defined ACL_CNT +#if defined HAVE_FACL && ! defined GETACLCNT && defined ACL_CNT # define GETACLCNT ACL_CNT #endif @@ -46,14 +46,23 @@ # define ENOTSUP (-1) #endif -#include "gettext.h" -#define _(msgid) gettext (msgid) - #ifndef HAVE_FCHMOD # define HAVE_FCHMOD false # define fchmod(fd, mode) (-1) #endif +/* Recognize some common errors such as from an NFS mount that does + not support ACLs, even when local drives do. */ +#if defined __APPLE__ && defined __MACH__ /* MacOS X */ +# define ACL_NOT_WELL_SUPPORTED(Err) \ + ((Err) == ENOTSUP || (Err) == ENOSYS || (Err) == EINVAL || (Err) == EBUSY || (Err) == ENOENT) +#elif defined EOPNOTSUPP /* Tru64 NFS */ +# define ACL_NOT_WELL_SUPPORTED(Err) \ + ((Err) == ENOTSUP || (Err) == ENOSYS || (Err) == EINVAL || (Err) == EBUSY || (Err) == EOPNOTSUPP) +#else +# define ACL_NOT_WELL_SUPPORTED(Err) \ + ((Err) == ENOTSUP || (Err) == ENOSYS || (Err) == EINVAL || (Err) == EBUSY) +#endif #if USE_ACL @@ -128,17 +137,8 @@ rpl_acl_set_fd (int fd, acl_t acl) # define MODE_INSIDE_ACL 1 # endif -# if defined __APPLE__ && defined __MACH__ /* MacOS X */ -# define ACL_NOT_WELL_SUPPORTED(Err) \ - ((Err) == ENOTSUP || (Err) == ENOSYS || (Err) == EINVAL || (Err) == EBUSY || (Err) == ENOENT) -# elif defined EOPNOTSUPP /* Tru64 NFS */ -# define ACL_NOT_WELL_SUPPORTED(Err) \ - ((Err) == ENOTSUP || (Err) == ENOSYS || (Err) == EINVAL || (Err) == EBUSY || (Err) == EOPNOTSUPP) -# else -# define ACL_NOT_WELL_SUPPORTED(Err) \ - ((Err) == ENOTSUP || (Err) == ENOSYS || (Err) == EINVAL || (Err) == EBUSY) -# endif - +/* Return the number of entries in ACL. + Return -1 and set errno upon failure to determine it. */ /* Define a replacement for acl_entries if needed. (Only Linux has it.) */ # if !HAVE_ACL_ENTRIES # define acl_entries rpl_acl_entries @@ -158,7 +158,7 @@ extern int acl_extended_nontrivial (acl_t); extern int acl_access_nontrivial (acl_t); # endif -# elif HAVE_ACL && defined GETACL /* Solaris, Cygwin, not HP-UX */ +# elif HAVE_FACL && defined GETACL /* Solaris, Cygwin, not HP-UX */ /* Set to 1 if a file's mode is implicit by the ACL. Set to 0 if a file's mode is stored independently from the ACL. */ @@ -216,6 +216,12 @@ extern int acl_nontrivial (int count, struct acl_entry *entries, struct stat *sb Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ extern int acl_nontrivial (struct acl *a); +# elif HAVE_ACLSORT /* NonStop Kernel */ + +/* Return 1 if the given ACL is non-trivial. + Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ +extern int acl_nontrivial (int count, struct acl *entries); + # endif #endif