Deleted Added
full compact
archive_entry_private.h (228763) archive_entry_private.h (232153)
1/*-
2 * Copyright (c) 2003-2007 Tim Kientzle
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 8 unchanged lines hidden (view full) ---

17 * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
18 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 *
1/*-
2 * Copyright (c) 2003-2007 Tim Kientzle
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 8 unchanged lines hidden (view full) ---

17 * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
18 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 *
25 * $FreeBSD: head/contrib/libarchive/libarchive/archive_entry_private.h 228763 2011-12-21 11:13:29Z mm $
25 * $FreeBSD: head/contrib/libarchive/libarchive/archive_entry_private.h 232153 2012-02-25 10:58:02Z mm $
26 */
27
28#ifndef __LIBARCHIVE_BUILD
29#error This header is only to be used internally to libarchive.
30#endif
31
32#ifndef ARCHIVE_ENTRY_PRIVATE_H_INCLUDED
33#define ARCHIVE_ENTRY_PRIVATE_H_INCLUDED
34
26 */
27
28#ifndef __LIBARCHIVE_BUILD
29#error This header is only to be used internally to libarchive.
30#endif
31
32#ifndef ARCHIVE_ENTRY_PRIVATE_H_INCLUDED
33#define ARCHIVE_ENTRY_PRIVATE_H_INCLUDED
34
35#include "archive_acl_private.h"
35#include "archive_string.h"
36
36#include "archive_string.h"
37
37/*
38 * Handle wide character (i.e., Unicode) and non-wide character
39 * strings transparently.
40 */
41
42struct aes {
43 struct archive_string aes_mbs;
44 struct archive_string aes_utf8;
45 const wchar_t *aes_wcs;
46 /* Bitmap of which of the above are valid. Because we're lazy
47 * about malloc-ing and reusing the underlying storage, we
48 * can't rely on NULL pointers to indicate whether a string
49 * has been set. */
50 int aes_set;
51#define AES_SET_MBS 1
52#define AES_SET_UTF8 2
53#define AES_SET_WCS 4
54};
55
56struct ae_acl {
57 struct ae_acl *next;
58 int type; /* E.g., access or default */
59 int tag; /* E.g., user/group/other/mask */
60 int permset; /* r/w/x bits */
61 int id; /* uid/gid for user/group */
62 struct aes name; /* uname/gname */
63};
64
65struct ae_xattr {
66 struct ae_xattr *next;
67
68 char *name;
69 void *value;
70 size_t size;
71};
72
38struct ae_xattr {
39 struct ae_xattr *next;
40
41 char *name;
42 void *value;
43 size_t size;
44};
45
46struct ae_sparse {
47 struct ae_sparse *next;
48
49 int64_t offset;
50 int64_t length;
51};
52
73/*
74 * Description of an archive entry.
75 *
76 * Basically, this is a "struct stat" with a few text fields added in.
77 *
78 * TODO: Add "comment", "charset", and possibly other entries
79 * that are supported by "pax interchange" format. However, GNU, ustar,
80 * cpio, and other variants don't support these features, so they're not an

--- 5 unchanged lines hidden (view full) ---

86 * applications (e.g., a package manager could attach special
87 * package-management attributes to each entry). There are tricky
88 * API issues involved, so this is not going to happen until
89 * there's a real demand for it.
90 *
91 * TODO: Design a good API for handling sparse files.
92 */
93struct archive_entry {
53/*
54 * Description of an archive entry.
55 *
56 * Basically, this is a "struct stat" with a few text fields added in.
57 *
58 * TODO: Add "comment", "charset", and possibly other entries
59 * that are supported by "pax interchange" format. However, GNU, ustar,
60 * cpio, and other variants don't support these features, so they're not an

--- 5 unchanged lines hidden (view full) ---

66 * applications (e.g., a package manager could attach special
67 * package-management attributes to each entry). There are tricky
68 * API issues involved, so this is not going to happen until
69 * there's a real demand for it.
70 *
71 * TODO: Design a good API for handling sparse files.
72 */
73struct archive_entry {
74 struct archive *archive;
75
94 /*
95 * Note that ae_stat.st_mode & AE_IFMT can be 0!
96 *
97 * This occurs when the actual file type of the object is not
98 * in the archive. For example, 'tar' archives store
99 * hardlinks without marking the type of the underlying
100 * object.
101 */
102
103 /*
76 /*
77 * Note that ae_stat.st_mode & AE_IFMT can be 0!
78 *
79 * This occurs when the actual file type of the object is not
80 * in the archive. For example, 'tar' archives store
81 * hardlinks without marking the type of the underlying
82 * object.
83 */
84
85 /*
104 * Read archive_entry_copy_stat.c for an explanation of why I
105 * don't just use "struct stat" instead of "struct aest" here
106 * and why I have this odd pointer to a separately-allocated
107 * struct stat.
86 * We have a "struct aest" for holding file metadata rather than just
87 * a "struct stat" because on some platforms the "struct stat" has
88 * fields which are too narrow to hold the range of possible values;
89 * we don't want to lose information if we read an archive and write
90 * out another (e.g., in "tar -cf new.tar @old.tar").
91 *
92 * The "stat" pointer points to some form of platform-specific struct
93 * stat; it is declared as a void * rather than a struct stat * as
94 * some platforms have multiple varieties of stat structures.
108 */
109 void *stat;
110 int stat_valid; /* Set to 0 whenever a field in aest changes. */
111
112 struct aest {
113 int64_t aest_atime;
114 uint32_t aest_atime_nsec;
115 int64_t aest_ctime;
116 uint32_t aest_ctime_nsec;
117 int64_t aest_mtime;
118 uint32_t aest_mtime_nsec;
119 int64_t aest_birthtime;
120 uint32_t aest_birthtime_nsec;
95 */
96 void *stat;
97 int stat_valid; /* Set to 0 whenever a field in aest changes. */
98
99 struct aest {
100 int64_t aest_atime;
101 uint32_t aest_atime_nsec;
102 int64_t aest_ctime;
103 uint32_t aest_ctime_nsec;
104 int64_t aest_mtime;
105 uint32_t aest_mtime_nsec;
106 int64_t aest_birthtime;
107 uint32_t aest_birthtime_nsec;
121 gid_t aest_gid;
108 int64_t aest_gid;
122 int64_t aest_ino;
109 int64_t aest_ino;
123 mode_t aest_mode;
124 uint32_t aest_nlink;
125 uint64_t aest_size;
110 uint32_t aest_nlink;
111 uint64_t aest_size;
126 uid_t aest_uid;
112 int64_t aest_uid;
127 /*
128 * Because converting between device codes and
129 * major/minor values is platform-specific and
130 * inherently a bit risky, we only do that conversion
131 * lazily. That way, we will do a better job of
132 * preserving information in those cases where no
133 * conversion is actually required.
134 */

--- 10 unchanged lines hidden (view full) ---

145 int ae_set; /* bitmap of fields that are currently set */
146#define AE_SET_HARDLINK 1
147#define AE_SET_SYMLINK 2
148#define AE_SET_ATIME 4
149#define AE_SET_CTIME 8
150#define AE_SET_MTIME 16
151#define AE_SET_BIRTHTIME 32
152#define AE_SET_SIZE 64
113 /*
114 * Because converting between device codes and
115 * major/minor values is platform-specific and
116 * inherently a bit risky, we only do that conversion
117 * lazily. That way, we will do a better job of
118 * preserving information in those cases where no
119 * conversion is actually required.
120 */

--- 10 unchanged lines hidden (view full) ---

131 int ae_set; /* bitmap of fields that are currently set */
132#define AE_SET_HARDLINK 1
133#define AE_SET_SYMLINK 2
134#define AE_SET_ATIME 4
135#define AE_SET_CTIME 8
136#define AE_SET_MTIME 16
137#define AE_SET_BIRTHTIME 32
138#define AE_SET_SIZE 64
139#define AE_SET_INO 128
140#define AE_SET_DEV 256
153
154 /*
155 * Use aes here so that we get transparent mbs<->wcs conversions.
156 */
141
142 /*
143 * Use aes here so that we get transparent mbs<->wcs conversions.
144 */
157 struct aes ae_fflags_text; /* Text fflags per fflagstostr(3) */
145 struct archive_mstring ae_fflags_text; /* Text fflags per fflagstostr(3) */
158 unsigned long ae_fflags_set; /* Bitmap fflags */
159 unsigned long ae_fflags_clear;
146 unsigned long ae_fflags_set; /* Bitmap fflags */
147 unsigned long ae_fflags_clear;
160 struct aes ae_gname; /* Name of owning group */
161 struct aes ae_hardlink; /* Name of target for hardlink */
162 struct aes ae_pathname; /* Name of entry */
163 struct aes ae_symlink; /* symlink contents */
164 struct aes ae_uname; /* Name of owner */
148 struct archive_mstring ae_gname; /* Name of owning group */
149 struct archive_mstring ae_hardlink; /* Name of target for hardlink */
150 struct archive_mstring ae_pathname; /* Name of entry */
151 struct archive_mstring ae_symlink; /* symlink contents */
152 struct archive_mstring ae_uname; /* Name of owner */
165
166 /* Not used within libarchive; useful for some clients. */
153
154 /* Not used within libarchive; useful for some clients. */
167 struct aes ae_sourcepath; /* Path this entry is sourced from. */
155 struct archive_mstring ae_sourcepath; /* Path this entry is sourced from. */
168
156
157 void *mac_metadata;
158 size_t mac_metadata_size;
159
169 /* ACL support. */
160 /* ACL support. */
170 struct ae_acl *acl_head;
171 struct ae_acl *acl_p;
172 int acl_state; /* See acl_next for details. */
173 wchar_t *acl_text_w;
161 struct archive_acl acl;
174
175 /* extattr support. */
176 struct ae_xattr *xattr_head;
177 struct ae_xattr *xattr_p;
178
162
163 /* extattr support. */
164 struct ae_xattr *xattr_head;
165 struct ae_xattr *xattr_p;
166
167 /* sparse support. */
168 struct ae_sparse *sparse_head;
169 struct ae_sparse *sparse_tail;
170 struct ae_sparse *sparse_p;
171
179 /* Miscellaneous. */
180 char strmode[12];
181};
182
172 /* Miscellaneous. */
173 char strmode[12];
174};
175
183
184#endif /* ARCHIVE_ENTRY_PRIVATE_H_INCLUDED */
176#endif /* ARCHIVE_ENTRY_PRIVATE_H_INCLUDED */