]> git.cworth.org Git - tar/blob - gnu/readlinkat.c
Imported Upstream version 1.24
[tar] / gnu / readlinkat.c
1 /* -*- buffer-read-only: t -*- vi: set ro: */
2 /* DO NOT EDIT! GENERATED AUTOMATICALLY! */
3 /* Read a symlink relative to an open directory.
4    Copyright (C) 2009-2010 Free Software Foundation, Inc.
5
6    This program is free software: you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3 of the License, or
9    (at your option) any later version.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
18
19 /* written by Eric Blake */
20
21 #include <config.h>
22
23 #include <unistd.h>
24
25 /* Gnulib provides a readlink stub for mingw; use it for distinction
26    between EINVAL and ENOENT, rather than always failing with ENOSYS.  */
27
28 /* POSIX 2008 says that unlike readlink, readlinkat returns 0 for
29    success instead of the buffer length.  But this would render
30    readlinkat worthless since readlink does not guarantee a
31    NUL-terminated buffer.  Assume this was a bug in POSIX.  */
32
33 /* Read the contents of symlink FILE into buffer BUF of size LEN, in the
34    directory open on descriptor FD.  If possible, do it without changing
35    the working directory.  Otherwise, resort to using save_cwd/fchdir,
36    then readlink/restore_cwd.  If either the save_cwd or the restore_cwd
37    fails, then give a diagnostic and exit nonzero.  */
38
39 #define AT_FUNC_NAME readlinkat
40 #define AT_FUNC_F1 readlink
41 #define AT_FUNC_POST_FILE_PARAM_DECLS , char *buf, size_t len
42 #define AT_FUNC_POST_FILE_ARGS        , buf, len
43 #define AT_FUNC_RESULT ssize_t
44 #include "at-func.c"
45 #undef AT_FUNC_NAME
46 #undef AT_FUNC_F1
47 #undef AT_FUNC_POST_FILE_PARAM_DECLS
48 #undef AT_FUNC_POST_FILE_ARGS
49 #undef AT_FUNC_RESULT