root/lib/acl_entries.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. acl_entries

     1 /* Return the number of entries in an ACL.
     2 
     3    Copyright (C) 2002-2003, 2005-2023 Free Software Foundation, Inc.
     4 
     5    This program is free software: you can redistribute it and/or modify
     6    it under the terms of the GNU General Public License as published by
     7    the Free Software Foundation, either version 3 of the License, or
     8    (at your option) any later version.
     9 
    10    This program is distributed in the hope that it will be useful,
    11    but WITHOUT ANY WARRANTY; without even the implied warranty of
    12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    13    GNU General Public License for more details.
    14 
    15    You should have received a copy of the GNU General Public License
    16    along with this program.  If not, see <https://www.gnu.org/licenses/>.
    17 
    18    Written by Paul Eggert and Andreas Gruenbacher.  */
    19 
    20 #include <config.h>
    21 
    22 #include "acl-internal.h"
    23 
    24 /* This file assumes POSIX-draft like ACLs
    25    (Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5).  */
    26 
    27 /* Return the number of entries in ACL.
    28    Return -1 and set errno upon failure to determine it.  */
    29 
    30 int
    31 acl_entries (acl_t acl)
    32 {
    33   int count = 0;
    34 
    35   if (acl != NULL)
    36     {
    37 #if HAVE_ACL_FIRST_ENTRY /* Linux, FreeBSD, Mac OS X, Cygwin >= 2.5 */
    38 # if HAVE_ACL_TYPE_EXTENDED /* Mac OS X */
    39       /* acl_get_entry returns 0 when it successfully fetches an entry,
    40          and -1/EINVAL at the end.  */
    41       acl_entry_t ace;
    42       int got_one;
    43 
    44       for (got_one = acl_get_entry (acl, ACL_FIRST_ENTRY, &ace);
    45            got_one >= 0;
    46            got_one = acl_get_entry (acl, ACL_NEXT_ENTRY, &ace))
    47         count++;
    48 # else /* Linux, FreeBSD, Cygwin >= 2.5 */
    49       /* acl_get_entry returns 1 when it successfully fetches an entry,
    50          and 0 at the end.  */
    51       acl_entry_t ace;
    52       int got_one;
    53 
    54       for (got_one = acl_get_entry (acl, ACL_FIRST_ENTRY, &ace);
    55            got_one > 0;
    56            got_one = acl_get_entry (acl, ACL_NEXT_ENTRY, &ace))
    57         count++;
    58       if (got_one < 0)
    59         return -1;
    60 # endif
    61 #else /* IRIX, Tru64 */
    62 # if HAVE_ACL_TO_SHORT_TEXT /* IRIX */
    63       /* Don't use acl_get_entry: it is undocumented.  */
    64       count = acl->acl_cnt;
    65 # endif
    66 # if HAVE_ACL_FREE_TEXT /* Tru64 */
    67       /* Don't use acl_get_entry: it takes only one argument and does not
    68          work.  */
    69       count = acl->acl_num;
    70 # endif
    71 #endif
    72     }
    73 
    74   return count;
    75 }

/* [<][>][^][v][top][bottom][index][help] */