Annotation of embedaddon/libiconv/srclib/careadlinkat.h, revision 1.1

1.1     ! misho       1: /* Read symbolic links into a buffer without size limitation, relative to fd.
        !             2: 
        !             3:    Copyright (C) 2011 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 <http://www.gnu.org/licenses/>.  */
        !            17: 
        !            18: /* Written by Paul Eggert, Bruno Haible, and Jim Meyering.  */
        !            19: 
        !            20: #ifndef _GL_CAREADLINKAT_H
        !            21: #define _GL_CAREADLINKAT_H
        !            22: 
        !            23: #include <fcntl.h>
        !            24: #include <unistd.h>
        !            25: 
        !            26: struct allocator;
        !            27: 
        !            28: /* Assuming the current directory is FD, get the symbolic link value
        !            29:    of FILENAME as a null-terminated string and put it into a buffer.
        !            30:    If FD is AT_FDCWD, FILENAME is interpreted relative to the current
        !            31:    working directory, as in openat.
        !            32: 
        !            33:    If the link is small enough to fit into BUFFER put it there.
        !            34:    BUFFER's size is BUFFER_SIZE, and BUFFER can be null
        !            35:    if BUFFER_SIZE is zero.
        !            36: 
        !            37:    If the link is not small, put it into a dynamically allocated
        !            38:    buffer managed by ALLOC.  It is the caller's responsibility to free
        !            39:    the returned value if it is nonnull and is not BUFFER.
        !            40: 
        !            41:    The PREADLINKAT function specifies how to read links.  It operates
        !            42:    like POSIX readlinkat()
        !            43:    <http://pubs.opengroup.org/onlinepubs/9699919799/functions/readlink.html>
        !            44:    but can assume that its first argument is the same as FD.
        !            45: 
        !            46:    If successful, return the buffer address; otherwise return NULL and
        !            47:    set errno.  */
        !            48: 
        !            49: char *careadlinkat (int fd, char const *filename,
        !            50:                     char *buffer, size_t buffer_size,
        !            51:                     struct allocator const *alloc,
        !            52:                     ssize_t (*preadlinkat) (int, char const *,
        !            53:                                             char *, size_t));
        !            54: 
        !            55: /* Suitable values for careadlinkat's FD and PREADLINKAT arguments,
        !            56:    when doing a plain readlink:
        !            57:    Pass FD = AT_FDCWD and PREADLINKAT = careadlinkatcwd.  */
        !            58: #if HAVE_READLINKAT
        !            59: /* AT_FDCWD is declared in <fcntl.h>.  */
        !            60: #else
        !            61: /* Define AT_FDCWD independently, so that the careadlinkat module does
        !            62:    not depend on the fcntl-h module.  The value does not matter, since
        !            63:    careadlinkatcwd ignores it, but we might as well use the same value
        !            64:    as fcntl-h.  */
        !            65: # ifndef AT_FDCWD
        !            66: #  define AT_FDCWD (-3041965)
        !            67: # endif
        !            68: #endif
        !            69: ssize_t careadlinkatcwd (int fd, char const *filename,
        !            70:                          char *buffer, size_t buffer_size);
        !            71: 
        !            72: #endif /* _GL_CAREADLINKAT_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>