Annotation of embedaddon/libiconv/srclib/careadlinkat.h, revision 1.1.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>