source: vendor/tar/1.16.1/lib/openat.h@ 3342

Last change on this file since 3342 was 3342, checked in by bird, 19 years ago

tar 1.16.1

File size: 4.0 KB
Line 
1/* provide a replacement openat function
2 Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
3
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2, or (at your option)
7 any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software Foundation,
16 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
17
18/* written by Jim Meyering */
19
20#include <fcntl.h>
21
22#include <sys/types.h>
23#include <sys/stat.h>
24#include <dirent.h>
25#include <unistd.h>
26#include <stdbool.h>
27
28#ifndef __attribute__
29# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__
30# define __attribute__(x) /* empty */
31# endif
32#endif
33
34#ifndef ATTRIBUTE_NORETURN
35# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
36#endif
37
38/* Work around a bug in Solaris 9 and 10: AT_FDCWD is positive. Its
39 value exceeds INT_MAX, so its use as an int doesn't conform to the
40 C standard, and GCC and Sun C complain in some cases. If the bug
41 is present, undef AT_FDCWD here, so it can be redefined below. */
42#if 0 < AT_FDCWD && AT_FDCWD == 0xffd19553
43# undef AT_FDCWD
44#endif
45
46/* Use the same bit pattern as Solaris 9, but with the proper
47 signedness. The bit pattern is important, in case this actually is
48 Solaris with the above workaround. */
49#ifndef AT_FDCWD
50# define AT_FDCWD (-3041965)
51#endif
52
53/* Use the same values as Solaris 9. This shouldn't matter, but
54 there's no real reason to differ. */
55#ifndef AT_SYMLINK_NOFOLLOW
56# define AT_SYMLINK_NOFOLLOW 4096