Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/libarchive/tar/bsdtar_platform.h
39483 views
1
/*-
2
* SPDX-License-Identifier: BSD-2-Clause
3
*
4
* Copyright (c) 2003-2007 Tim Kientzle
5
* All rights reserved.
6
*/
7
8
/*
9
* This header is the first thing included in any of the bsdtar
10
* source files. As far as possible, platform-specific issues should
11
* be dealt with here and not within individual source files.
12
*/
13
14
#ifndef BSDTAR_PLATFORM_H_INCLUDED
15
#define BSDTAR_PLATFORM_H_INCLUDED
16
17
#if defined(PLATFORM_CONFIG_H)
18
/* Use hand-built config.h in environments that need it. */
19
#include PLATFORM_CONFIG_H
20
#else
21
/* Not having a config.h of some sort is a serious problem. */
22
#include "config.h"
23
#endif
24
25
#if defined(_WIN32) && !defined(__CYGWIN__)
26
#include "bsdtar_windows.h"
27
#endif
28
29
#ifdef HAVE_LIBARCHIVE
30
/* If we're using the platform libarchive, include system headers. */
31
#include <archive.h>
32
#include <archive_entry.h>
33
#else
34
/* Otherwise, include user headers. */
35
#include "archive.h"
36
#include "archive_entry.h"
37
#endif
38
39
#ifdef HAVE_LIBACL
40
#include <acl/libacl.h>
41
#endif
42
43
/*
44
* Include "dirent.h" (or its equivalent on several different platforms).
45
*
46
* This is slightly modified from the GNU autoconf recipe.
47
* In particular, FreeBSD includes d_namlen in its dirent structure,
48
* so my configure script includes an explicit test for the d_namlen
49
* field.
50
*/
51
#if HAVE_DIRENT_H
52
# include <dirent.h>
53
# if HAVE_DIRENT_D_NAMLEN
54
# define DIRENT_NAMLEN(dirent) (dirent)->d_namlen
55
# else
56
# define DIRENT_NAMLEN(dirent) strlen((dirent)->d_name)
57
# endif
58
#else
59
# define dirent direct
60
# define DIRENT_NAMLEN(dirent) (dirent)->d_namlen
61
# if HAVE_SYS_NDIR_H
62
# include <sys/ndir.h>
63
# endif
64
# if HAVE_SYS_DIR_H
65
# include <sys/dir.h>
66
# endif
67
# if HAVE_NDIR_H
68
# include <ndir.h>
69
# endif
70
#endif
71
72
#if HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC
73
#define ARCHIVE_STAT_CTIME_NANOS(st) (st)->st_ctimespec.tv_nsec
74
#define ARCHIVE_STAT_MTIME_NANOS(st) (st)->st_mtimespec.tv_nsec
75
#elif HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC
76
#define ARCHIVE_STAT_CTIME_NANOS(st) (st)->st_ctim.tv_nsec
77
#define ARCHIVE_STAT_MTIME_NANOS(st) (st)->st_mtim.tv_nsec
78
#elif HAVE_STRUCT_STAT_ST_MTIME_N
79
#define ARCHIVE_STAT_CTIME_NANOS(st) (st)->st_ctime_n
80
#define ARCHIVE_STAT_MTIME_NANOS(st) (st)->st_mtime_n
81
#elif HAVE_STRUCT_STAT_ST_UMTIME
82
#define ARCHIVE_STAT_CTIME_NANOS(st) (st)->st_uctime * 1000
83
#define ARCHIVE_STAT_MTIME_NANOS(st) (st)->st_umtime * 1000
84
#elif HAVE_STRUCT_STAT_ST_MTIME_USEC
85
#define ARCHIVE_STAT_CTIME_NANOS(st) (st)->st_ctime_usec * 1000
86
#define ARCHIVE_STAT_MTIME_NANOS(st) (st)->st_mtime_usec * 1000
87
#else
88
#define ARCHIVE_STAT_CTIME_NANOS(st) (0)
89
#define ARCHIVE_STAT_MTIME_NANOS(st) (0)
90
#endif
91
92
/* How to mark functions that don't return. */
93
/* This facilitates use of some newer static code analysis tools. */
94
#undef __LA_NORETURN
95
#if defined(__GNUC__) && (__GNUC__ > 2 || \
96
(__GNUC__ == 2 && __GNUC_MINOR__ >= 5))
97
#define __LA_NORETURN __attribute__((__noreturn__))
98
#elif defined(_MSC_VER)
99
#define __LA_NORETURN __declspec(noreturn)
100
#else
101
#define __LA_NORETURN
102
#endif
103
104
#endif /* !BSDTAR_PLATFORM_H_INCLUDED */
105
106