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>