38# define iconv_open(tocode, fromcode) ((iconv_t)-1)
41# define iconv(cd, inbuf, inbytesleft, outbuf, outbytesleft) (errno = ENOSYS, (size_t)-1)
44# define iconv_close(cd) 0
57xheader_keyword_override_p(
const char *
keyword);
60fnmatch(
const char *pattern,
const char *
string,
int flags);
69locate_handler(
char const *
keyword);
81call_freefun(
struct obstack *
h,
void *old_chunk);
94 size_t *xattr_map_size,
95 const char *key,
const char *val,
size_t len);
102 const char *key,
const char *val,
size_t len);
105xattr_decode_keyword(
char *
keyword);
109 char const *
keyword,
char const *arg,
size_t size);
117 char const *
keyword,
char const *arg,
size_t size);
125 char const *
keyword,
char const *arg,
size_t size);
133 char const *
keyword,
char const *arg,
size_t size);
142 char const *arg,
size_t size);
151 char const *arg,
size_t size);
280decode_num_v2_arp(uintmax_t *num,
char const *arg, uintmax_t maxval,
290code_num(uintmax_t value,
char const *
keyword,
struct xheader *xhdr);
330decode_string(
char **
string,
char const *arg);
342utf8_init(
bool to_utf);
345code_string(
char const *
string,
char const *
keyword,
struct xheader *xhdr);
354strtosysint(
char const *arg,
char **arglim, intmax_t minval, uintmax_t maxval);
357decode_signed_num(intmax_t *num,
char const *arg,
358 intmax_t minval, uintmax_t maxval,
368sysinttostr(uintmax_t value, intmax_t minval, uintmax_t maxval,
372code_signed_num(uintmax_t value,
char const *
keyword,
373 intmax_t minval, uintmax_t maxval,
struct xheader *xhdr);
405out_of_range_header(
char const *
keyword,
char const *value,
406 intmax_t minval, uintmax_t maxval);
412decode_time(
struct timespec *ts,
char const *arg,
char const *
keyword);
421strtoimax(
char const *ptr,
char **endptr,
int base);
430x_obstack_1grow(
struct xheader *xhdr,
char c);
433x_obstack_grow(
struct xheader *xhdr,
const char *ptr,
size_t length);
439xattr_encode_keyword(
const char *keyword);
442xheader_print_n(
struct xheader *xhdr,
char const *keyword,
443 char const *value,
size_t vsize);
446xheader_print(
struct xheader *xhdr,
char const *keyword,
char const *value);
449atime_coder(
struct tar_stat_info const *st,
char const *keyword,
453code_time(
struct timespec t,
char const *keyword,
struct xheader *xhdr);
456decode_record(
struct xheader *xhdr,
458 void (*handler)(
void *,
char const *,
char const *,
size_t),
471xheader_keyword_override_p(
const char *keyword)
475 for (kp = keyword_override_list; kp; kp = kp->
next)
476 if (strcmp(kp->
pattern, keyword) == 0)
492 for (kp = keyword_pattern_list; kp; kp = kp->
next)
503decx(
void *
data,
char const *keyword,
char const *
value,
size_t size)
509 || xheader_keyword_override_p(keyword))
512 t = locate_handler(keyword);
519 (0, 0,
_(
"Ignoring unknown extended header keyword '%s'"),
522 pedro_dprintf(2,
"Ignoring unknown extended header keyword '%s'", keyword);
531locate_handler(
char const *
keyword)
557 for (; kp; kp = kp->
next)
572 run_override_list(keyword_global_override_list, st);
573 run_override_list(global_header_override_list, st);
578 while (decode_record(&st->
xhdr, &p, decx, st))
581 run_override_list(keyword_override_list, st);
611 while (lp != 0 && ((
void *)lp >= obj || (
void *)(lp)->
limit < obj))
618 h->maybe_empty_object = 1;
622 h->object_base =
h->next_free = (
char *)(obj);
623 h->chunk_limit = lp->
limit;
636call_freefun(
struct obstack *
h,
void *old_chunk)
638 if (
h->use_extra_arg)
639 h->freefun.extra(
h->extra_arg, old_chunk);
641 h->freefun.plain(old_chunk);
657 size_t obj_size =
h->next_free -
h->object_base;
661 size_t sum1 = obj_size + length;
662 size_t sum2 = sum1 +
h->alignment_mask;
663 size_t new_size = sum2 + (obj_size >> 3) + 100;
667 if (new_size < h->chunk_size)
668 new_size =
h->chunk_size;
671 if (obj_size <= sum1 && sum1 <= sum2)
672 new_chunk = call_chunkfun(
h, new_size);
675 assert(0 &&
"Memory exausted");
678 h->chunk = new_chunk;
679 new_chunk->
prev = old_chunk;
680 new_chunk->
limit =
h->chunk_limit = (
char *)new_chunk + new_size;
687 memcpy(object_base,
h->object_base, obj_size);
692 if (!
h->maybe_empty_object
698 call_freefun(
h, old_chunk);
701 h->object_base = object_base;
702 h->next_free =
h->object_base + obj_size;
704 h->maybe_empty_object = 0;
725 assert(0 &&
"will never occur...");
736 size_t *xattr_map_size,
737 const char *key,
const char *val,
size_t len)
739 size_t pos = (*xattr_map_size)++;
743 (*xattr_map)[pos].xkey =
xstrdup(key);
744 (*xattr_map)[pos].xval_ptr =
xmemdup(val,
len + 1);
745 (*xattr_map)[pos].xval_len =
len;
755 register char *
d =
dest;
756 register const char *s =
src;
760 while (*s++ !=
'\0');
771 const char *key,
const char *val,
size_t len)
773 size_t klen = strlen(key);
774 char *xkey =
xmalloc(strlen(
"SCHILY.xattr.") + klen + 1);
777 tmp =
stpcpy(tmp,
"SCHILY.xattr.");
793xattr_decode_keyword(
char *keyword)
803 if (kpr[1] ==
'3' && kpr[2] ==
'D')
810 else if (kpr[1] ==
'2' && kpr[2] ==
'5')
835 char const *keyword,
char const *arg,
size_t size)
840 size_t klen_raw = strlen(keyword);
842 xkey =
alloca(klen_raw + 1);
843 memcpy(xkey, keyword, klen_raw + 1) ;
847 memcpy(xstr, arg,
size + 1); ;
849 xattr_decode_keyword(xkey);
859xattr_coder(
struct tar_stat_info const *st,
char const *keyword,
863 const size_t *off =
data;
865 xheader_print_n(xhdr, keyword,
886xattr_acls_d_coder(
struct tar_stat_info const *st,
char const *keyword,
909xattr_acls_a_coder(
struct tar_stat_info const *st,
char const *keyword,
931xattr_selinux_coder(
struct tar_stat_info const *st,
char const *keyword,
934 code_string(st->
cntx_name, keyword, xhdr);
948 if (decode_num_v2_arp(&u, arg,
TYPE_MAXIMUM(uintmax_t), keyword))
962 off_t
const *v =
data;
964 code_num(*v, keyword, xhdr);
978 if (decode_num_v2_arp(&u, arg,
TYPE_MAXIMUM(uintmax_t), keyword))
990 off_t
const *v =
data;
992 code_num(*v, keyword, xhdr);
1029 code_string(
data, keyword, xhdr);
1059 size_t size = strlen(p) + 1;
1083 char const *keyword,
1099 ERROR((0, 0,
_(
"Malformed extended header: invalid %s=%s"),
1102 pedro_dprintf(2,
"Malformed extended header: invalid %s=%s",
1108 u = strtoimax(arg, &delim, 10);
1117 if (errno == ERANGE)
1119 out_of_range_header(keyword, arg, 0,
TYPE_MAXIMUM(off_t));
1126 if (errno == ERANGE)
1128 out_of_range_header(keyword, arg, 0,
TYPE_MAXIMUM(off_t));
1136 ERROR((0, 0,
_(
"Malformed extended header: excess %s=%s"),
1149 else if (*delim !=
',')
1153 _(
"Malformed extended header: invalid %s: unexpected delimiter %c"),
1156 pedro_dprintf(2,
"Malformed extended header: invalid %s: unexpected delimiter %c",
1168 _(
"Malformed extended header: invalid %s: odd number of values"),
1171 pedro_dprintf(2,
"Malformed extended header: invalid %s: odd number of values",
1182 char const *keyword,
1188 if (decode_num_v2_arp(&u, arg,
TYPE_MAXIMUM(off_t), keyword))
1195 ERROR((0, 0,
_(
"Malformed extended header: excess %s=%s"),
1209sparse_numbytes_coder(
struct tar_stat_info const *st,
char const *keyword,
1212 size_t const *pi =
data;
1223 char const *keyword,
1229 if (decode_num_v2_arp(&u, arg,
TYPE_MAXIMUM(off_t), keyword))
1236 ERROR((0, 0,
_(
"Malformed extended header: excess %s=%s"),
1237 "GNU.sparse.offset", arg));
1241 "GNU.sparse.offset", arg);
1251sparse_offset_coder(
struct tar_stat_info const *st,
char const *keyword,
1254 size_t const *pi =
data;
1265 char const *keyword,
1271 if (decode_num_v2_arp(&u, arg, SIZE_MAX, keyword))
1284sparse_numblocks_coder(
struct tar_stat_info const *st,
char const *keyword,
1297 char const *keyword,
1303 if (decode_num_v2_arp(&u, arg,
TYPE_MAXIMUM(off_t), keyword))
1315sparse_size_coder(
struct tar_stat_info const *st,
char const *keyword,
1318 size_coder(st, keyword, xhdr,
data);
1327 char const *keyword,
1333 if (decode_num_v2_arp(&u, arg,
TYPE_MAXIMUM(
unsigned), keyword))
1342sparse_minor_coder(
struct tar_stat_info const *st,
char const *keyword,
1354 char const *keyword,
1360 if (decode_num_v2_arp(&u, arg,
TYPE_MAXIMUM(
unsigned), keyword))
1369sparse_major_coder(
struct tar_stat_info const *st,
char const *keyword,
1386 raw_path_decoder(st, arg);
1399 decode_string(&st->
uname, arg);
1407uname_coder(
struct tar_stat_info const *st,
char const *keyword,
1410 code_string(st->
uname, keyword, xhdr);
1419 char const *keyword,
1427 st->
stat.st_uid = u;
1435uid_coder(
struct tar_stat_info const *st,
char const *keyword,
1438 code_signed_num(st->
stat.st_uid, keyword,
1447decode_num_v2_arp(uintmax_t *num,
char const *arg, uintmax_t maxval,
1448 char const *keyword)
1452 if (!decode_signed_num(&
i, arg, 0, maxval, keyword))
1464 char const *keyword,
1470 if (decode_num_v2_arp(&u, arg,
TYPE_MAXIMUM(off_t), keyword))
1471 st->
stat.st_size = u;
1479code_num(uintmax_t value,
char const *keyword,
struct xheader *xhdr)
1481 code_signed_num(value, keyword, 0, UINTMAX_MAX, xhdr);
1489size_coder(
struct tar_stat_info const *st,
char const *keyword,
1492 code_num(st->
stat.st_size, keyword, xhdr);
1519 raw_path_decoder(st, arg);
1527path_coder(
struct tar_stat_info const *st,
char const *keyword,
1530 code_string(st->
file_name, keyword, xhdr);
1539 char const *keyword,
1545 if (decode_time(&ts, arg, keyword))
1554mtime_coder(
struct tar_stat_info const *st,
char const *keyword,
1559 code_time(mtime ? *mtime : st->
mtime, keyword, xhdr);
1580linkpath_coder(
struct tar_stat_info const *st,
char const *keyword,
1583 code_string(st->
link_name, keyword, xhdr);
1591decode_string(
char **
string,
char const *arg)
1615 decode_string(&st->
gname, arg);
1628 iconv_t cd = utf8_init(to_utf);
1638 inlen = strlen(
input) + 1;
1639 outlen = inlen * MB_LEN_MAX + 1;
1640 ob =
ret = malloc(outlen);
1653 if (
iconv(cd, &ib, &inlen, &ob, &outlen) != 0)
1668utf8_init(
bool to_utf)
1670 if (conv_desc[(
int)to_utf] == (
iconv_t)-1)
1673 conv_desc[(
int)to_utf] =
iconv_open(
"UTF-8", locale_charset());
1675 conv_desc[(
int)to_utf] =
iconv_open(locale_charset(),
"UTF-8");
1677 return conv_desc[(
int)to_utf];
1685code_string(
char const *
string,
char const *keyword,
struct xheader *xhdr)
1694 xheader_print(xhdr, keyword, outstr);
1703gname_coder(
struct tar_stat_info const *st,
char const *keyword,
1706 code_string(st->
gname, keyword, xhdr);
1713#if !(UINTMAX_MAX / 2 <= INTMAX_MAX)
1714# error "represent_uintmax returns intmax_t to represent uintmax_t"
1724 if (n <= INTMAX_MAX)
1729 intmax_t nd = n - INTMAX_MIN;
1730 return nd + INTMAX_MIN;
1747#if !(INTMAX_MAX <= UINTMAX_MAX)
1748# error "strtosysint: nonnegative intmax_t does not fit in uintmax_t"
1756strtosysint(
char const *arg,
char **arglim, intmax_t minval, uintmax_t maxval)
1759 if (maxval <= INTMAX_MAX)
1761 if (
ISDIGIT(arg[*arg ==
'-']))
1763 intmax_t
i = strtoimax(arg, arglim, 10);
1764 intmax_t imaxval = maxval;
1765 if (minval <=
i &&
i <= imaxval)
1768 return i < minval ? (intmax_t) minval : (intmax_t) maxval;
1775 uintmax_t
i = strtoumax(arg, arglim, 10);
1792decode_signed_num(intmax_t *num,
char const *arg,
1793 intmax_t minval, uintmax_t maxval,
1794 char const *keyword)
1797 intmax_t u =
strtosysint(arg, &arg_lim, minval, maxval);
1799 if (errno ==
EINVAL || *arg_lim)
1802 ERROR((0, 0,
_(
"Malformed extended header: invalid %s=%s"),
1805 pedro_dprintf(2,
"Malformed extended header: invalid %s=%s",
1810 if (errno == ERANGE)
1812 out_of_range_header(keyword, arg, minval, maxval);
1826 char const *keyword,
1834 st->
stat.st_gid = u;
1843#if !(INTMAX_MAX <= UINTMAX_MAX / 2)
1844# error "sysinttostr: uintmax_t cannot represent all intmax_t values"
1855 if (value <= maxval)
1859 intmax_t
i = value - minval;
1869code_signed_num(uintmax_t value,
char const *keyword,
1870 intmax_t minval, uintmax_t maxval,
struct xheader *xhdr)
1874 xheader_print(xhdr, keyword,
sysinttostr(value, minval, maxval, sbuf));
1882gid_coder(
struct tar_stat_info const *st,
char const *keyword,
1885 code_signed_num(st->
stat.st_gid, keyword,
1895 char const *keyword,
1901 if (decode_time(&ts, arg, keyword))
1910ctime_coder(
struct tar_stat_info const *st,
char const *keyword,
1913 code_time(st->
ctime, keyword, xhdr);
1954 *--p =
'0' -
i % 10;
1955 while ((
i /= 10) != 0);
1962 *--p =
'0' +
i % 10;
1963 while ((
i /= 10) != 0);
1975out_of_range_header(
char const *keyword,
char const *value,
1976 intmax_t minval, uintmax_t maxval)
1980 char *minval_string =
imaxtostr(minval, minval_buf);
1981 char *maxval_string =
umaxtostr(maxval, maxval_buf);
1987 ERROR((0, 0,
_(
"Extended header %s=%s is out of range %s..%s"),
1988 keyword, value, minval_string, maxval_string));
1991 pedro_dprintf(2,
"Extended header %s=%s is out of range %s..%s",
1992 keyword, value, minval_string, maxval_string);
2002 return 0 <= t.tv_nsec;
2010decode_time(
struct timespec *ts,
char const *arg,
char const *keyword)
2017 if (arg < arg_lim && !*arg_lim)
2018 out_of_range_header(keyword, arg,
TYPE_MINIMUM(time_t),
2023 ERROR((0, 0,
_(
"Malformed extended header: invalid %s=%s"),
2026 pedro_dprintf(2,
"Malformed extended header: invalid %s=%s", keyword, arg);
2041 char const *keyword,
2047 if (decode_time(&ts, arg, keyword))
2069 while (ns % 10 == 0)
2079 p[--
i] =
'0' + ns % 10;
2094 time_t s = t.tv_sec;
2097 bool negative = s < 0;
2103 if (negative && ns != 0)
2109 np =
umaxtostr(negative ? -(uintmax_t)s : (uintmax_t)s, sbuf + 1);
2125 char const *p = arg;
2126 bool negative = *arg ==
'-';
2137 intmax_t
i = strtoimax(arg, arg_lim, 10);
2145 uintmax_t
i = strtoumax(arg, arg_lim, 10);
2155 if (parse_fraction && *p ==
'.')
2158 bool trailing_nonzero =
false;
2162 digits++, ns = 10 * ns + (*p -
'0');
2164 trailing_nonzero |= *p !=
'0';
2174 ns += trailing_nonzero;
2188 if (errno == ERANGE)
2192 *arg_lim = (
char *)p;
2203x_obstack_1grow(
struct xheader *xhdr,
char c)
2214x_obstack_grow(
struct xheader *xhdr,
const char *ptr,
size_t length)
2217 xhdr->
size += length;
2225xattr_encode_keyword(
const char *keyword)
2227 static char *encode_buffer =
NULL;
2228 static size_t encode_buffer_size = 0;
2233 encode_buffer_size = 256;
2234 encode_buffer = malloc(encode_buffer_size);
2239 for (bp = 0; *keyword != 0; ++bp, ++keyword)
2243 if (bp + 2 >= encode_buffer_size)
2245 encode_buffer =
x2realloc(encode_buffer, &encode_buffer_size);
2250 strcpy(encode_buffer + bp,
"%25");
2255 strcpy(encode_buffer + bp,
"%3D");
2259 encode_buffer[bp] =
c;
2262 encode_buffer[bp] = 0;
2264 return encode_buffer;
2272xheader_print_n(
struct xheader *xhdr,
char const *keyword,
2273 char const *value,
size_t vsize)
2281 keyword = xattr_encode_keyword(keyword);
2282 klen = strlen(keyword);
2283 len = klen + vsize + 3;
2289 n = nbuf +
sizeof nbuf - 1 - np;
2292 x_obstack_grow(xhdr, np, n);
2293 x_obstack_1grow(xhdr,
' ');
2294 x_obstack_grow(xhdr, keyword, klen);
2295 x_obstack_1grow(xhdr,
'=');
2296 x_obstack_grow(xhdr, value, vsize);
2297 x_obstack_1grow(xhdr,
'\n');
2305xheader_print(
struct xheader *xhdr,
char const *keyword,
char const *value)
2307 xheader_print_n(xhdr, keyword, value, strlen(value));
2315atime_coder(
struct tar_stat_info const *st,
char const *keyword,
2318 code_time(st->
atime, keyword, xhdr);
2326code_time(
struct timespec t,
char const *keyword,
struct xheader *xhdr)
2334 {
"atime", atime_coder, atime_decoder, 0,
false },
2335 {
"comment", dummy_coder, dummy_decoder, 0,
false },
2336 {
"charset", dummy_coder, dummy_decoder, 0,
false },
2337 {
"ctime", ctime_coder, ctime_decoder, 0,
false },
2338 {
"gid", gid_coder, gid_decoder, 0,
false },
2339 {
"gname", gname_coder, gname_decoder, 0,
false },
2340 {
"linkpath", linkpath_coder, linkpath_decoder, 0,
false },
2341 {
"mtime", mtime_coder, mtime_decoder, 0,
false },
2342 {
"path", path_coder, path_decoder, 0,
false },
2343 {
"size", size_coder, size_decoder, 0,
false },
2344 {
"uid", uid_coder, uid_decoder, 0,
false },
2345 {
"uname", uname_coder, uname_decoder, 0,
false },
2348 {
"GNU.sparse.name", path_coder, sparse_path_decoder,
2350 {
"GNU.sparse.major", sparse_major_coder, sparse_major_decoder,
2352 {
"GNU.sparse.minor", sparse_minor_coder, sparse_minor_decoder,
2354 {
"GNU.sparse.realsize", sparse_size_coder, sparse_size_decoder,
2356 {
"GNU.sparse.numblocks", sparse_numblocks_coder, sparse_numblocks_decoder,
2360 {
"GNU.sparse.size", sparse_size_coder, sparse_size_decoder,
2366 {
"GNU.sparse.offset", sparse_offset_coder, sparse_offset_decoder,
2368 {
"GNU.sparse.numbytes", sparse_numbytes_coder, sparse_numbytes_decoder,
2371 {
"GNU.sparse.map",
NULL ,
2372 sparse_map_decoder, 0,
false },
2374 {
"GNU.dumpdir", dumpdir_coder, dumpdir_decoder,
2379 {
"GNU.volume.label", volume_label_coder, volume_label_decoder,
2388 {
"GNU.volume.filename", volume_label_coder, volume_filename_decoder,
2390 {
"GNU.volume.size", volume_size_coder, volume_size_decoder,
2392 {
"GNU.volume.offset", volume_offset_coder, volume_offset_decoder,
2397 {
"RHT.security.selinux",
2398 xattr_selinux_coder, xattr_selinux_decoder, 0,
false },
2401 {
"SCHILY.acl.access",
2402 xattr_acls_a_coder, xattr_acls_a_decoder, 0,
false },
2404 {
"SCHILY.acl.default",
2405 xattr_acls_d_coder, xattr_acls_d_decoder, 0,
false },
2410 {
"SCHILY.xattr", xattr_coder, xattr_decoder, 0,
true },
2431 assert(0 &&
"never will occur");
static const void * data
Definition XzCrc64.c:50
void pedro_dprintf(int amanda_level, char *format,...)
Definition pedro.c:43
#define assert(condition)
Definition lz4.c:273
const char * src
Definition lz4.h:866
char * dest
Definition lz4.h:806
#define __attribute__(unused_ric_since_2004)
Definition main_cr.c:84
#define input(b, o, c, n, m)
Definition compress42.c:610
#define output(b, o, c, n)
Definition compress42.c:592
#define __PTR_ALIGN(B, P, A)
Definition obstack.h:146
#define _OBSTACK_SIZE_T
Definition obstack.h:128
#define obstack_grow(h, where, length)
Definition obstack.h:464
#define obstack_1grow(h, datum)
Definition obstack.h:481
void * x2nrealloc(void *p, size_t *pn, size_t s)
Definition sparse_2_k.c:3330
int gid_t
Definition sparse_2_k.c:116
#define ISDIGIT(c)
Definition sparse_2_k.c:555
int uid_t
Definition sparse_2_k.c:117
char buf[N_BUF]
Definition spewG.c:36
char * limit
Definition obstack.h:169
char contents[__FLEXIBLE_ARRAY_MEMBER]
Definition obstack.h:171
struct _obstack_chunk * prev
Definition obstack.h:170
Definition poolTests.c:28
Definition tar_1_33.c:3105
char * value
Definition tar_1_33.c:3108
struct keyword_list * next
Definition tar_1_33.c:3106
char * pattern
Definition tar_1_33.c:3107
off_t numbytes
Definition tar.h:267
off_t offset
Definition tar.h:266
char * acls_a_ptr
Definition tar.h:300
struct sp_array * sparse_map
Definition tar.h:326
size_t acls_a_len
Definition tar.h:301
char * gname
Definition tar.h:296
struct xheader xhdr
Definition tar.h:340
unsigned sparse_minor
Definition tar.h:321
off_t real_size
Definition tar.h:328
size_t sparse_map_avail
Definition tar.h:322
size_t sparse_map_size
Definition tar.h:325
off_t archive_file_size
Definition tar.h:314
bool had_trailing_slash
Definition tar.h:291
char * acls_d_ptr
Definition tar.h:303
char * file_name
Definition tar.h:289
char * dumpdir
Definition tar.h:346
struct xattr_array * xattr_map
Definition tar.h:337
struct _stat stat
Definition tar.h:306
char * orig_file_name
Definition tar.h:288
struct timespec mtime
Definition tar.h:311
unsigned sparse_major
Definition tar.h:320
bool real_size_set
Definition tar.h:329
struct timespec ctime
Definition tar.h:312
bool sparse_name_done
Definition tar.h:332
char * uname
Definition tar.h:295
char * cntx_name
Definition tar.h:298
size_t xattr_map_size
Definition tar.h:336
struct timespec atime
Definition tar.h:310
char * link_name
Definition tar.h:293
size_t acls_d_len
Definition tar.h:304
char * xval_ptr
Definition tar.h:282
size_t xval_len
Definition tar.h:283
Definition tar_1_33.c:3051
bool prefix
Definition tar_1_33.c:3057
char const * keyword
Definition tar_1_33.c:3052
void(* decoder)(struct tar_stat_info *, char const *, char const *, size_t)
Definition tar_1_33.c:3055
#define BLOCKSIZE
Definition tar.h:248
#define INT_BUFSIZE_BOUND(t)
Definition tar_1_33.c:541
#define XHDR_PROTECTED
Definition tar_1_33.c:3043
#define WARNOPT(opt, args)
Definition tar_1_33.c:3280
#define TYPE_SIGNED(t)
Definition tar_1_33.c:3232
char * xstrdup(char const *string)
Safe strdup() that never returns NULL.
Definition tar_1_33.c:3038
void set_next_block_after(union block *block)
Definition tar_1_33.c:5178
#define WARN_UNKNOWN_KEYWORD
Definition tar_1_33.c:3262
void assign_string(char **string, const char *value)
Definition tar_1_33.c:5155
uintmax_t continued_file_size
Definition tar_1_33.c:3010
#define UINTMAX_STRSIZE_BOUND
Definition tar_1_33.c:543
char * continued_file_name
Definition tar_1_33.c:3009
uintmax_t continued_file_offset
Definition tar_1_33.c:3011
#define TYPE_MINIMUM(t)
Definition tar_1_33.c:3236
union block * find_next_block(void)
Definition tar_1_33.c:6798
#define INT_STRLEN_BOUND(t)
Definition tar_1_33.c:76
#define TYPE_MAXIMUM(t)
Definition tar_1_33.c:3237
void * xmemdup(void const *p, size_t s)
Definition tar_1_33.c:3024
char * volume_label
Definition tar_1_33.c:3008
#define XHDR_GLOBAL
Definition tar_1_33.c:3044
char buffer[BLOCKSIZE]
Definition tar.h:374
#define const
Definition zconf.h:230
#define d(i)
Definition sha256.c:44
#define c(i)
Definition sha256.c:43
#define h(i)
Definition sha256.c:48
#define e(i)
Definition sha256.c:45
uint32_t flags
Definition container.h:628
lzma_index ** i
Definition index.h:629
#define NULL
Definition getopt1.c:37
#define _(msgid)
Definition getopt.c:49
static uint32_t const uint8_t uint32_t len
Definition memcmplen.h:44
static uint32_t const uint8_t uint32_t uint32_t limit
Definition memcmplen.h:45
#define alloca(size)
Definition getopt.c:66
ret
Definition zlib_interface.c:30
#define EINVAL
Definition errno.h:13