1 /* Internals for openat-like functions.
3 Copyright (C) 2005, 2006 Free Software Foundation, Inc.
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 2, or (at your option)
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.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software Foundation,
17 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
19 /* written by Jim Meyering */
24 #define OPENAT_BUFFER_SIZE 512
25 char *openat_proc_name (char buf[OPENAT_BUFFER_SIZE], int fd, char const *file);
27 /* Some systems don't have ENOSYS. */
30 # define ENOSYS ENOTSUP
32 /* Some systems don't have ENOTSUP either. */
33 # define ENOSYS EINVAL
37 /* Some systems don't have EOPNOTSUPP. */
40 # define EOPNOTSUPP ENOTSUP
42 /* Some systems don't have ENOTSUP either. */
43 # define EOPNOTSUPP EINVAL
47 /* Trying to access a BUILD_PROC_NAME file will fail on systems without
48 /proc support, and even on systems *with* ProcFS support. Return
49 nonzero if the failure may be legitimate, e.g., because /proc is not
50 readable, or the particular .../fd/N directory is not present. */
51 #define EXPECTED_ERRNO(Errno) \
52 ((Errno) == ENOTDIR || (Errno) == ENOENT \
53 || (Errno) == EPERM || (Errno) == EACCES \
54 || (Errno) == ENOSYS /* Solaris 8 */ \
55 || (Errno) == EOPNOTSUPP /* FreeBSD */)