root/lib/openat.h

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

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. chownat
  2. lchownat
  3. chmodat
  4. lchmodat
  5. statat
  6. lstatat

     1 /* provide a replacement openat function
     2    Copyright (C) 2004-2006, 2008-2023 Free Software Foundation, Inc.
     3 
     4    This program is free software: you can redistribute it and/or modify
     5    it under the terms of the GNU General Public License as published by
     6    the Free Software Foundation, either version 3 of the License, or
     7    (at your option) any later version.
     8 
     9    This program is distributed in the hope that it will be useful,
    10    but WITHOUT ANY WARRANTY; without even the implied warranty of
    11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    12    GNU General Public License for more details.
    13 
    14    You should have received a copy of the GNU General Public License
    15    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
    16 
    17 /* written by Jim Meyering */
    18 
    19 #ifndef _GL_HEADER_OPENAT
    20 #define _GL_HEADER_OPENAT
    21 
    22 /* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _Noreturn,
    23    _GL_ATTRIBUTE_DEPRECATED, HAVE_OPENAT.  */
    24 #if !_GL_CONFIG_H_INCLUDED
    25  #error "Please include config.h first."
    26 #endif
    27 
    28 #include <fcntl.h>
    29 
    30 #include <sys/types.h>
    31 #include <sys/stat.h>
    32 #include <unistd.h>
    33 
    34 _GL_INLINE_HEADER_BEGIN
    35 
    36 #if !HAVE_OPENAT
    37 
    38 int openat_permissive (int fd, char const *file, int flags, mode_t mode,
    39                        int *cwd_errno);
    40 bool openat_needs_fchdir (void);
    41 
    42 #else
    43 
    44 # define openat_permissive(Fd, File, Flags, Mode, Cwd_errno) \
    45     openat (Fd, File, Flags, Mode)
    46 # define openat_needs_fchdir() false
    47 
    48 #endif
    49 
    50 _Noreturn void openat_restore_fail (int);
    51 _Noreturn void openat_save_fail (int);
    52 
    53 /* Using these function names makes application code
    54    slightly more readable than it would be with
    55    fchownat (..., 0) or fchownat (..., AT_SYMLINK_NOFOLLOW).  */
    56 
    57 #if GNULIB_CHOWNAT
    58 
    59 # ifndef CHOWNAT_INLINE
    60 #  define CHOWNAT_INLINE _GL_INLINE
    61 # endif
    62 
    63 CHOWNAT_INLINE int
    64 chownat (int fd, char const *file, uid_t owner, gid_t group)
    65 {
    66   return fchownat (fd, file, owner, group, 0);
    67 }
    68 
    69 CHOWNAT_INLINE int
    70 lchownat (int fd, char const *file, uid_t owner, gid_t group)
    71 {
    72   return fchownat (fd, file, owner, group, AT_SYMLINK_NOFOLLOW);
    73 }
    74 
    75 #endif
    76 
    77 #if GNULIB_CHMODAT
    78 
    79 # ifndef CHMODAT_INLINE
    80 #  define CHMODAT_INLINE _GL_INLINE
    81 # endif
    82 
    83 CHMODAT_INLINE int
    84 chmodat (int fd, char const *file, mode_t mode)
    85 {
    86   return fchmodat (fd, file, mode, 0);
    87 }
    88 
    89 CHMODAT_INLINE int
    90 lchmodat (int fd, char const *file, mode_t mode)
    91 {
    92   return fchmodat (fd, file, mode, AT_SYMLINK_NOFOLLOW);
    93 }
    94 
    95 #endif
    96 
    97 #if GNULIB_STATAT
    98 
    99 # ifndef STATAT_INLINE
   100 #  define STATAT_INLINE _GL_INLINE
   101 # endif
   102 
   103 _GL_ATTRIBUTE_DEPRECATED
   104 STATAT_INLINE int
   105 statat (int fd, char const *name, struct stat *st)
   106 {
   107   return fstatat (fd, name, st, 0);
   108 }
   109 
   110 _GL_ATTRIBUTE_DEPRECATED
   111 STATAT_INLINE int
   112 lstatat (int fd, char const *name, struct stat *st)
   113 {
   114   return fstatat (fd, name, st, AT_SYMLINK_NOFOLLOW);
   115 }
   116 
   117 #endif
   118 
   119 /* For now, there are no wrappers named laccessat or leuidaccessat,
   120    since gnulib doesn't support faccessat(,AT_SYMLINK_NOFOLLOW) and
   121    since access rights on symlinks are of limited utility.  Likewise,
   122    wrappers are not provided for accessat or euidaccessat, so as to
   123    avoid dragging in -lgen on some platforms.  */
   124 
   125 _GL_INLINE_HEADER_END
   126 
   127 #endif /* _GL_HEADER_OPENAT */

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