4#define Print_Long_ARP "ll"
6#define Print_Long_ARP "I64"
14#define S_ISCTG(mode) (((mode)&S_IFMT) == S_IFCTG)
16#define S_ISCTG(mode) 0
22#define UNAME_FIELD_SIZE 32
23#define GNAME_FIELD_SIZE 32
25#define NAME_FIELD_SIZE 100
26#define PREFIX_FIELD_SIZE 155
28#define GLOBAL_HEADER_TEMPLATE "/GlobalHead.%p.%n"
31#define MAX(a, b) ((a) > (b) ? (a) : (b))
34#define DEFAULT_ALIGNMENT MAX(__alignof__(long double), \
35 MAX(__alignof__(uintmax_t), \
37#define DEFAULT_ROUNDING MAX(sizeof(long double), \
38 MAX(sizeof(uintmax_t), \
67static time_t exthdr_mtime;
68static char *exthdr_mtime_option ;
69static char *globexthdr_mtime_option;
70static time_t globexthdr_mtime;
73static size_t global_header_count;
76static char *globexthdr_name;
109#define FILE_SYSTEM_PREFIX_LEN(P) 0
110#define ISSLASH(C) ((C) == '/')
120mode_to_chars(mode_t v,
char *p,
size_t s);
123uid_to_chars(
int v,
char *p,
size_t s);
126gid_to_chars(
int v,
char *p,
size_t s);
133major_to_chars(
major_t v,
char *p,
size_t s);
136minor_to_chars(
minor_t v,
char *p,
size_t s);
139string_to_chars(
char const *
str,
char *p,
size_t s);
141#define UNAME_TO_CHARS(name, buf) string_to_chars(name, buf, sizeof(buf))
142#define GNAME_TO_CHARS(name, buf) string_to_chars(name, buf, sizeof(buf))
143#define MINOR_TO_CHARS(val, where) minor_to_chars(val, where, sizeof(where))
144#define MAJOR_TO_CHARS(val, where) major_to_chars(val, where, sizeof(where))
145#define MODE_TO_CHARS(val, where) mode_to_chars(val, where, sizeof(where))
146#define UID_TO_CHARS(val, where) uid_to_chars(val, where, sizeof(where))
147#define GID_TO_CHARS(val, where) gid_to_chars(val, where, sizeof(where))
151#define S_IRGRP (S_IRUSR >> 3)
152#define S_IWGRP (S_IWUSR >> 3)
153#define S_IXGRP (S_IXUSR >> 3)
155#define S_IROTH (S_IRUSR >> 6)
156#define S_IWOTH (S_IWUSR >> 6)
157#define S_IXOTH (S_IXUSR >> 6)
159#define MODE_WXUSR (S_IWUSR | S_IXUSR)
160#define MODE_R (S_IRUSR | S_IRGRP | S_IROTH)
161#define MODE_RW (S_IWUSR | S_IWGRP | S_IWOTH | MODE_R)
162#define MODE_RWX (S_IXUSR | S_IXGRP | S_IXOTH | MODE_RW)
163#define MODE_ALL (S_ISUID | S_ISGID | S_ISVTX | MODE_RWX)
165#define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
166#define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)
168#define CHMOD_MODE_BITS \
169 (S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO)
171#define STRINGIFY_BIGINT(i, b) umaxtostr(i, b)
179#define MAX_VAL_WITH_DIGITS(digits, bits_per_digit) \
180 ((digits) * (bits_per_digit) < sizeof(uintmax_t) * CHAR_BIT \
181 ? ((uintmax_t)1 << ((digits) * (bits_per_digit))) - 1 \
186#define MAX_OCTAL_VAL(buffer) MAX_VAL_WITH_DIGITS(sizeof(buffer) - 1, LG_8)
188#define OFF_TO_CHARS(val, where) off_to_chars(val, where, sizeof(where))
189#define TIME_TO_CHARS(val, where) time_to_chars(val, where, sizeof(where))
193#define MAX_VAL_WITH_DIGITS(digits, bits_per_digit) \
194 ((digits) * (bits_per_digit) < sizeof(uintmax_t) * CHAR_BIT \
195 ? ((uintmax_t)1 << ((digits) * (bits_per_digit))) - 1 \
273#define DEFAULT_GROWTH_THRESHOLD 0.8f
274#define DEFAULT_GROWTH_FACTOR 1.414f
282#define DEFAULT_SHRINK_THRESHOLD 0.0f
283#define DEFAULT_SHRINK_FACTOR 1.0f
340split_long_name(
const char *
name,
size_t length);
344 struct sparse *sp,
size_t sparse_size);
356_obstack_begin_worker(
struct obstack *
h,
361 void *(*chunkfun)(
size_t),
362 void (*freefun)(
void *));
380code_string(
char const *
string,
char const *keyword,
struct xheader *xhdr);
382static struct keyword_list *keyword_global_override_list = {0};
390x_obstack_1grow(
struct xheader *xhdr,
char c);
393x_obstack_blank(
struct xheader *xhdr,
size_t length);
396x_obstack_grow(
struct xheader *xhdr,
const char *ptr,
size_t length);
412mode_adjust(mode_t oldmode,
bool dir, mode_t umask_value,
413 struct mode_change const *changes, mode_t *pmode_bits);
458 struct hash_entry **bucket_head,
bool delete);
461 void const **matched_ent);
468hash_string_compare(
void const *name1,
void const *name2);
474hash_string_hasher(
void const *
name,
size_t n_buckets);
477is_prime(
size_t candidate);
480next_prime(
size_t candidate);
483compute_bucket_size(
size_t candidate,
const Hash_tuning *tuning);
489raw_comparator(
const void *
a,
const void *
b);
495raw_hasher(
const void *
data,
size_t n);
503 const char **return_prefix);
507 bool absolute_names);
519xheader_keyword_override_p(
const char *keyword);
525xheader_init(
struct xheader *xhdr);
533locate_handler(
char const *
keyword);
540strtoumax(
char const *ptr,
char **endptr,
int base)
542 return strtoul(ptr, endptr, base);
550strtoimax(
char const *ptr,
char **endptr,
int base)
552 return strtol(ptr, endptr, base);
555#define ISDIGIT(c) ((unsigned)(c) - '0' <= 9)
557#define xalloc_oversized(n, s) \
558 ((size_t)(PTRDIFF_MAX < SIZE_MAX ? PTRDIFF_MAX : SIZE_MAX - 1) / (s) < (n))
560#define _GL_ADD_OVERFLOW(a, b, min, max) \
561 __builtin_add_overflow_p(a, b, (__typeof__((a) + (b)))0)
563#define _GL_BINARY_OP_OVERFLOW(a, b, op_result_overflow) \
564 op_result_overflow(a, b, \
565 _GL_INT_MINIMUM(_GL_INT_CONVERT(a, b)), \
566 _GL_INT_MAXIMUM(_GL_INT_CONVERT(a, b)))
568#define INT_ADD_OVERFLOW(a, b) \
569 _GL_BINARY_OP_OVERFLOW(a, b, _GL_ADD_OVERFLOW)
614 star_sparse_member_p,
617 star_get_sparse_info,
620 sparse_extract_region,
642 oldgnu_sparse_member_p,
645 oldgnu_get_sparse_info,
648 sparse_extract_region,
669 sparse_extract_region,
691to_chars(
int negative, uintmax_t value,
size_t valsize,
692 uintmax_t (*substitute)(
int *),
693 char *where,
size_t size,
const char *type);
704 struct fmttab
const *p;
706 for (p = fmttab; p->name; p++)
717split_long_name(
const char *
name,
size_t length)
725 for (
i = length - 1;
i > 0;
i--)
737 struct sparse *sp,
size_t sparse_size)
739 for (; *pindex <
file->stat_info->sparse_map_avail && sparse_size > 0; sparse_size--, sp++, ++*pindex)
784 if (
h->use_extra_arg)
785 return h->chunkfun.extra(
h->extra_arg,
size);
787 return h->chunkfun.plain(
size);
801_obstack_begin_worker(
struct obstack *
h,
823 h->chunk_size =
size;
824 h->alignment_mask = alignment - 1;
826 chunk =
h->chunk = call_chunkfun(
h,
h->chunk_size);
829 assert(0 &&
"Malloc problems");
832 h->next_free =
h->object_base =
__PTR_ALIGN((
char *)chunk, chunk->contents,
834 h->chunk_limit = chunk->
limit = (
char *)chunk +
h->chunk_size;
837 h->maybe_empty_object = 0;
848 void *(*chunkfun)(
size_t),
849 void (*freefun)(
void *))
851 h->chunkfun.plain = chunkfun;
852 h->freefun.plain = freefun;
853 h->use_extra_arg = 0;
854 return _obstack_begin_worker(
h,
size, alignment);
870 bool saw_slash =
false;
875 for (p = base; *p; p++)
929 if (globexthdr_mtime_option)
930 t = globexthdr_mtime;
934 if (exthdr_mtime_option)
939 header->header.typeflag = type;
963 global_header_count++;
973 if (!globexthdr_name)
976 const char *tmp = getenv(
"TMPDIR");
981 strcpy(globexthdr_name, tmp);
996 for (kp = keyword_override_list; kp; kp = kp->
next)
1007x_obstack_blank(
struct xheader *xhdr,
size_t length)
1010 xhdr->
size += length;
1037 n = nbuf +
sizeof nbuf - 1 - np;
1040 p = strlen(keyword) + n + 2;
1046 _(
"Generated keyword/value pair is too long (keyword=%s, length=%s)"),
1050 pedro_dprintf(2,
"Generated keyword/value pair is too long (keyword=%s, length=%s)", keyword, nbuf);
1054 x_obstack_blank(xhdr, p);
1055 x_obstack_1grow(xhdr,
'\n');
1060 cp =
stpcpy(cp, keyword);
1077 x_obstack_grow(xhdr, s, strlen(s));
1101 struct passwd *passwd;
1103 if (uid != 0 && uid == cached_no_such_uid)
1109 if (!cached_uname || uid != cached_uid)
1111 passwd = getpwuid(uid);
1119 cached_no_such_uid = uid;
1124 *uname =
xstrdup(cached_uname);
1133minor_to_chars(
minor_t v,
char *p,
size_t s)
1135 return to_chars(v < 0, (uintmax_t)v,
sizeof v, 0, p, s,
"minor_t");
1143major_to_chars(
major_t v,
char *p,
size_t s)
1145 return to_chars(v < 0, (uintmax_t)v,
sizeof v, 0, p, s,
"major_t");
1154 if (
a.tv_sec <
b.tv_sec)
1156 if (
a.tv_sec >
b.tv_sec)
1164 return a.tv_nsec -
b.tv_nsec;
1186 struct mode_change const *changes, mode_t *pmode_bits)
1192 mode_t mode_bits = 0;
1196 mode_t affected = changes->
affected;
1197 mode_t omit_change =
1199 mode_t value = changes->
value;
1201 switch (changes->
flag)
1233 value &= (affected ? affected : ~umask_value) & ~omit_change;
1235 switch (changes->
op)
1242 mode_t preserved = (affected ? ~affected : 0) | omit_change;
1244 newmode = (newmode & preserved) | value;
1261 *pmode_bits = mode_bits;
1281 for (cursor = bucket; cursor; cursor = cursor->
next)
1282 if (entry == cursor->
data ||
table->comparator(entry, cursor->
data))
1283 return cursor->
data;
1373 return write_long_name(st);
1389 char const *uname =
NULL;
1390 char const *gname =
NULL;
1392 header = write_header_name(st);
1467 struct timespec mtime;
1498 if (S_ISCHR(st->
stat.st_mode) || S_ISBLK(st->
stat.st_mode))
1599 size_t scan_xattr = 0;
1602 while (scan_xattr < st->xattr_map_size)
1622 off_t realsize = st->
stat.st_size;
1627 st->
stat.st_size = realsize;
1643 if (
table->free_entry_list)
1645 new =
table->free_entry_list;
1646 table->free_entry_list =
new->next;
1653 new = malloc(
sizeof *
new);
1677 for (bucket =
src->bucket; bucket < src->bucket_limit; bucket++)
1689 for (cursor = bucket->
next; cursor; cursor =
next)
1692 new_bucket = safe_hasher(
dst,
data);
1696 if (new_bucket->
data)
1701 new_bucket->
next = cursor;
1708 dst->n_buckets_used++;
1709 free_entry(
dst, cursor);
1719 new_bucket = safe_hasher(
dst,
data);
1721 if (new_bucket->
data)
1727 if (new_entry ==
NULL)
1731 new_entry->
next = new_bucket->
next;
1732 new_bucket->
next = new_entry;
1738 dst->n_buckets_used++;
1741 src->n_buckets_used--;
1762 size_t new_size = compute_bucket_size(candidate,
table->tuning);
1766 if (new_size ==
table->n_buckets)
1768 new_table = &storage;
1769 new_table->
bucket = calloc(new_size,
sizeof *new_table->
bucket);
1797 new_table->entry_stack =
table->entry_stack;
1801 if (transfer_entries(new_table,
table,
false))
1804 free(
table->bucket);
1828 if (!(transfer_entries(
table, new_table,
true) && transfer_entries(
table, new_table,
false)))
1847 table->free_entry_list = entry;
1860 size_t n =
table->hasher(key,
table->n_buckets);
1862 if (!(n < table->n_buckets))
1864 return table->bucket + n;
1879 struct hash_entry **bucket_head,
bool delete)
1884 *bucket_head = bucket;
1891 if (entry == bucket->
data ||
table->comparator(entry, bucket->
data))
1916 for (cursor = bucket; cursor->
next; cursor = cursor->
next)
1962 void const **matched_ent)
1974 if ((
data = hash_find_entry(
table, entry, &bucket,
false)) !=
NULL)
1977 *matched_ent =
data;
1986 if (
table->n_buckets_used >
table->tuning->growth_threshold *
table->n_buckets)
1990 check_tuning(
table);
1991 if (
table->n_buckets_used >
table->tuning->growth_threshold *
table->n_buckets)
1999 if (SIZE_MAX <= candidate)
2007 if (hash_find_entry(
table, entry, &bucket,
false) !=
NULL)
2018 if (new_entry ==
NULL)
2023 new_entry->
data = (
void *)entry;
2025 bucket->
next = new_entry;
2032 bucket->
data = (
void *)entry;
2034 table->n_buckets_used++;
2044 void const **matched_ent)
2056 if ((
data = hash_find_entry(
table, entry, &bucket,
false)) !=
NULL)
2059 *matched_ent =
data;
2068 if (
table->n_buckets_used >
table->tuning->growth_threshold *
table->n_buckets)
2072 check_tuning(
table);
2073 if (
table->n_buckets_used >
table->tuning->growth_threshold *
table->n_buckets)
2081 if ((
float)SIZE_MAX <= candidate)
2089 if (hash_find_entry(
table, entry, &bucket,
false) !=
NULL)
2100 if (new_entry ==
NULL)
2105 new_entry->
data = (
void *)entry;
2107 bucket->
next = new_entry;
2114 bucket->
data = (
void *)entry;
2116 table->n_buckets_used++;
2134 void const *matched_ent;
2139 : (
void *)(err == 0 ? matched_ent : entry));
2149hash_string_compare(
void const *name1,
void const *name2)
2151 return strcmp(name1, name2) == 0;
2172#define HASH_ONE_CHAR(Value, Byte) \
2173 ((Byte) + rotl_sz(Value, 7))
2178 for (; (ch = *string);
string++)
2179 value = HASH_ONE_CHAR(value, ch);
2180 return value % n_buckets;
2202 for (; (ch = *string);
string++)
2203 value = (value * 31 + ch) % n_buckets;
2216hash_string_hasher(
void const *
name,
size_t n_buckets)
2229is_prime(
size_t candidate)
2232 size_t square = divisor * divisor;
2234 while (square < candidate && (candidate % divisor))
2237 square += 4 * divisor;
2241 return (candidate % divisor ?
true :
false);
2249next_prime(
size_t candidate)
2258 while (SIZE_MAX != candidate && !is_prime(candidate))
2269compute_bucket_size(
size_t candidate,
const Hash_tuning *tuning)
2274 if ((
float)SIZE_MAX <= new_candidate)
2276 candidate = new_candidate;
2278 candidate = next_prime(candidate);
2300 if (tuning == &default_tuning)
2313 table->tuning = &default_tuning;
2324raw_comparator(
const void *
a,
const void *
b)
2336 return ((x >> n) | (x << ((CHAR_BIT *
sizeof x) - n))) & SIZE_MAX;
2344raw_hasher(
const void *
data,
size_t n)
2368 hasher = raw_hasher;
2369 if (comparator ==
NULL)
2370 comparator = raw_comparator;
2377 tuning = &default_tuning;
2378 table->tuning = tuning;
2379 if (!check_tuning(
table))
2389 table->n_buckets = compute_bucket_size(candidate, tuning);
2390 if (!
table->n_buckets)
2397 table->n_buckets_used = 0;
2398 table->n_entries = 0;
2400 table->hasher = hasher;
2401 table->comparator = comparator;
2402 table->data_freer = data_freer;
2421 const char **return_prefix)
2430 memcpy(s,
string,
len);
2437 hash_string_compare, 0))) &&
2440 assert(0 &&
"Malloc problems, exiting...");
2466 bool absolute_names)
2479 for (p = file_name + prefix_len; *p;)
2481 if (p[0] ==
'.' && p[1] ==
'.' && (
ISSLASH(p[2]) || !p[2]))
2482 prefix_len = p + 2 - file_name;
2492 for (p = file_name + prefix_len;
ISSLASH(*p); p++)
2494 prefix_len = p - file_name;
2499 if (hash_string_insert_prefix(&prefix_table[link_target], file_name,
2500 prefix_len, &prefix))
2502 static char const *
const diagnostic[] =
2504 "Removing leading `%s' from member names",
2505 "Removing leading `%s' from hard link targets"};
2507 WARN((0, 0, (
const char *)diagnostic[link_target], prefix));
2518 static char const *
const diagnostic[] =
2520 "Substituting `.' for empty member name",
2521 "Substituting `.' for empty hard link target"};
2523 WARN((0, 0,
"%s",
_(diagnostic[link_target])));
2541 assert(0 &&
"dentro de dir name");
2545 size_t length = dir_len(file);
2546 bool append_dot = (length == 0
2547 || (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE
2549 && file[2] !=
'\0' && !
ISSLASH(file[2])));
2550 char *dir = malloc(length + append_dot + 1);
2553 memcpy(dir, file, length);
2555 dir[length++] =
'.';
2574 assert(0 &&
"Malloc problem, exiting");
2607 char const *pptr =
NULL;
2609 char const *nptr =
NULL;
2612 for (p =
fmt; *p; p++)
2614 if (*p ==
'%' && p[1])
2636 len += strlen(base);
2642 len += pidbuf +
sizeof pidbuf - 1 - pptr;
2647 len += nbuf +
sizeof nbuf - 1 - nptr;
2659 for (q =
buf, p =
fmt; *p;)
2716xheader_init(
struct xheader *xhdr)
2732 if (
file->optab->extract_region)
2733 return file->optab->extract_region(file,
i);
2748 if (!tar_sparse_init(&file))
2751 file.stat_info = st;
2756 rc = tar_sparse_decode_header(&file);
2757 for (
i = 0; rc &&
i < file.stat_info->sparse_map_avail;
i++)
2758 rc = tar_sparse_extract_region(&file,
i);
2759 *
size = file.stat_info->archive_file_size - file.dumped_size;
2796decode_num(uintmax_t *num,
char const *arg, uintmax_t maxval);
2834 if (
file->optab->fixup_header)
2835 return file->optab->fixup_header(file);
2847 if (!tar_sparse_init(&file))
2849 file.stat_info = st;
2850 return tar_sparse_fixup_header(&file);
2860 if (
file->optab->sparse_member_p)
2861 return file->optab->sparse_member_p(file);
2873 if (!tar_sparse_init(&file))
2875 file.stat_info = st;
2876 return tar_sparse_member_p(&file);
2886 if (
file->optab->done)
2887 return file->optab->done(file);
2898 if (
file->optab->decode_header)
2899 return file->optab->decode_header(file);
2917 file->stat_info->sparse_map_avail = 0;
2919 if (
h->star_in_header.prefix[0] ==
'\0' &&
h->star_in_header.sp[0].offset[10] !=
'\0')
2924 rc = oldgnu_add_sparse(file, &
h->star_in_header.sp[
i]);
2928 ext_p =
h->star_in_header.isextended;
2933 for (; rc ==
add_ok && ext_p; ext_p =
h->star_ext_header.isextended)
2943 printf(
"Unexpected EOF in archive");
2948 rc = oldgnu_add_sparse(file, &
h->star_ext_header.sp[
i]);
2959 pedro_dprintf(2,
"%s: Invalid sparse archive member",
file->stat_info->orig_file_name);
2960 printf(
"%s: Invalid sparse archive member",
file->stat_info->orig_file_name);
2977 file->stat_info->archive_file_size =
file->stat_info->stat.st_size;
2978 file->stat_info->stat.st_size = max(0, realsize);
2979 return 0 <= realsize;
3006 if (!t || !t->
coder)
3010 xheader_init(&st->
xhdr);
3011 if (!xheader_keyword_override_p(
keyword))
3030 char *save_file_name =
file->stat_info->file_name;
3032#define COPY_STRING(b, dst, src) \
3035 char *endp = b->buffer + BLOCKSIZE; \
3036 char const *srcp = src; \
3041 set_next_block_after(b); \
3042 b = find_next_block(); \
3044 endp = b->buffer + BLOCKSIZE; \
3052 size += strlen(p) + 1;
3053 for (
i = 0;
i <
file->stat_info->sparse_map_avail;
i++)
3056 size += strlen(p) + 1;
3058 size += strlen(p) + 1;
3070 file->stat_info->file_name =
3076 blk = pax_start_header(
file->stat_info);
3078 free(
file->stat_info->file_name);
3079 file->stat_info->file_name = save_file_name;
3086 for (
i = 0;
i <
file->stat_info->sparse_map_avail;
i++)
3115 char *save_file_name =
NULL;
3123 for (
i = 0;
i <
file->stat_info->sparse_map_avail;
i++)
3132 save_file_name =
file->stat_info->file_name;
3134 "%d/GNUSparseFile.%p/%f", 0);
3137 for (
i = 0;
i <
file->stat_info->sparse_map_avail;
i++)
3150 free(
file->stat_info->file_name);
3151 file->stat_info->file_name = save_file_name;
3155 blk = pax_start_header(
file->stat_info);
3159 free(
file->stat_info->file_name);
3160 file->stat_info->file_name = save_file_name;
3173decode_num(uintmax_t *num,
char const *arg, uintmax_t maxval)
3182 u = strtoumax(arg, &arg_lim, 10);
3184 if (!(u <= maxval && errno != ERANGE) || *arg_lim)
3198 if (
file->stat_info->sparse_major > 0)
3207#define COPY_BUF(b, buf, src) \
3210 char *endp = b->buffer + BLOCKSIZE; \
3214 if (dst == buf + 5000 - 1) \
3216 printf("%s: numeric overflow in sparse archive member", \
3217 file->stat_info->orig_file_name); \
3222 set_next_block_after(b); \
3223 b = find_next_block(); \
3225 printf("Unexpected EOF in archive"); \
3227 endp = b->buffer + BLOCKSIZE; \
3230 } while (*dst++ != '\n'); \
3242 printf(
"Unexpected EOF in archive");
3252 pedro_dprintf(2,
"%s: malformed sparse archive member",
file->stat_info->orig_file_name);
3253 printf(
"%s: malformed sparse archive member",
file->stat_info->orig_file_name);
3257 file->stat_info->sparse_map_size = u;
3258 file->stat_info->sparse_map = calloc(
file->stat_info->sparse_map_size,
3259 sizeof(*
file->stat_info->sparse_map));
3260 file->stat_info->sparse_map_avail = 0;
3261 for (
i = 0;
i <
file->stat_info->sparse_map_size;
i++)
3272 pedro_dprintf(2,
"%s: malformed sparse archive member",
file->stat_info->orig_file_name);
3273 printf(
"%s: malformed sparse archive member",
file->stat_info->orig_file_name);
3286 pedro_dprintf(2,
"%s: malformed sparse archive member",
file->stat_info->orig_file_name);
3287 printf(
"%s: malformed sparse archive member",
file->stat_info->orig_file_name);
3292 sparse_add_map(
file->stat_info, &sp);
3312 return (
file->stat_info->sparse_major == 0) ? pax_dump_header_0(file) : pax_dump_header_1(
file);
3322 return file->stat_info->sparse_map_avail > 0 ||
file->stat_info->sparse_major > 0;
3344 DEFAULT_MXFAST = 64 *
sizeof(size_t) / 4
3347 n = DEFAULT_MXFAST / s;
3352 assert(0 &&
"nao pode acontecer");
3361 if ((PTRDIFF_MAX < SIZE_MAX ? PTRDIFF_MAX : SIZE_MAX) / 3 * 2 / s <= n)
3363 assert(0 &&
"nao pode acontecer");
3369 return realloc(p, n * s);
3385 sparse_map[avail] = *sp;
3407 sparse_add_map(
file->stat_info, &sp);
3428 size_t bytes = write(fd,
buf, count);
3430#if defined F_SETFL && O_NONBLOCK
3431#error nao pode chegar aqui
3432 if (
bytes < count && errno == EAGAIN)
3434 int flags = fcntl(fd, F_GETFL);
3435 if (0 <=
flags &&
flags & O_NONBLOCK && fcntl(fd, F_SETFL,
flags & ~O_NONBLOCK) != -1)
3437 char const *buffer =
buf;
3455 return write(fd,
"", 0);
3467 ERROR((0,
e,
_(
"%s: Cannot seek to %s"),
3468 quotearg_colon(
name),
3472 printf(
"%s: Cannot seek to %lld",
name, (__int64)
offset);
3484 WARN((0,
e,
_(
"%s: Warning: Cannot seek to %s"),
3485 quotearg_colon(
name),
3490 printf(
"%s: Warning: Cannot seek to %lld",
name, (__int64)
offset);
3533 wrbytes = write(
file->fd, zero_buf,
size);
3540 file->offset += wrbytes;
3555 : !dump_zeros(file,
offset))
3572 if (!lseek_or_error(file,
file->stat_info->sparse_map[
i].offset))
3575 write_size =
file->stat_info->sparse_map[
i].numbytes;
3577 if (write_size == 0)
3584 pedro_dprintf(2,
"Error truncating file %s\n",
file->stat_info->orig_file_name);
3585 printf(
"Error truncating file %s\n",
file->stat_info->orig_file_name);
3589 while (write_size > 0)
3599 printf(
"Unexpected EOF in archive");
3606 write_size -= count;
3608 file->offset += count;
3609 if (count != wrbytes)
3629 off_t bytes_left =
file->stat_info->sparse_map[
i].numbytes;
3631 if (!lseek_or_error(file,
file->stat_info->sparse_map[
i].offset))
3634 while (bytes_left > 0)
3640 bytes_read = read(
file->fd, blk->
buffer, bufsize);
3641 if (-1 == (
int)bytes_read)
3652 else if (bytes_read == 0)
3658 if (fstat(
file->fd, &st) == 0)
3659 n =
file->stat_info->stat.st_size - st.st_size;
3661 n =
file->stat_info->stat.st_size
3662 - (
file->stat_info->sparse_map[
i].offset
3663 +
file->stat_info->sparse_map[
i].numbytes
3668 ngettext(
"%s: File shrank by %s byte; padding with zeros",
3669 "%s: File shrank by %s bytes; padding with zeros",
3671 quotearg_colon(
file->stat_info->orig_file_name),
3680 bytes_left -= bytes_read;
3681 file->dumped_size += bytes_read;
3702 file->stat_info->sparse_map_avail = 0;
3705 rc = oldgnu_add_sparse(file, &
h->oldgnu_header.sp[
i]);
3710 for (ext_p =
h->oldgnu_header.isextended;
3711 rc ==
add_ok && ext_p; ext_p =
h->sparse_header.isextended)
3719 printf(
"Unexpected EOF in archive");
3725 rc = oldgnu_add_sparse(file, &
h->sparse_header.sp[
i]);
3734 pedro_dprintf(2,
"%s: invalid sparse archive member",
file->stat_info->orig_file_name);
3735 printf(
"%s: invalid sparse archive member",
file->stat_info->orig_file_name);
3753 file->stat_info->archive_file_size =
file->stat_info->stat.st_size;
3754 file->stat_info->stat.st_size = max(0, realsize);
3755 return 0 <= realsize;
3781 oldgnu_store_sparse_info(file, &
i,
3787 while (
i < file->stat_info->sparse_map_avail)
3791 oldgnu_store_sparse_info(file, &
i,
3827 file->optab = &oldgnu_optab;
3831 file->optab = &pax_optab;
3835 file->optab = &star_optab;
3851 memset(file, 0,
sizeof *file);
3853 if (!sparse_select_optab(file))
3856 if (
file->optab->init)
3857 return file->optab->init(file);
3872 if (!tar_sparse_init(&file))
3875 file.stat_info = st;
3878 rc = tar_sparse_decode_header(&file);
3879 skip_file(file.stat_info->archive_file_size - file.dumped_size);
static const void * data
Definition XzCrc64.c:50
static const void size_t const UInt64 * table
Definition XzCrc64.c:50
void pedro_dprintf(int amanda_level, char *format,...)
Definition pedro.c:43
char * umaxtostr(uintmax_t i, char *buf)
Definition create_zen_ar.c:952
union block * write_short_name(struct tar_stat_info *st)
Definition create_zen_ar.c:1268
off_t current_block_ordinal(void)
Definition create_zen_ar.c:1213
#define assert(condition)
Definition lz4.c:273
char * dst
Definition lz4.h:833
const char * src
Definition lz4.h:866
char * dest
Definition lz4.h:806
#define __attribute__(unused_ric_since_2004)
Definition main_cr.c:84
file
Definition check_size.py:20
#define min(a, b)
Definition compress42.c:304
#define __PTR_ALIGN(B, P, A)
Definition obstack.h:146
#define _OBSTACK_SIZE_T
Definition obstack.h:128
#define obstack_alloc(h, length)
Definition obstack.h:510
#define obstack_blank(h, length)
Definition obstack.h:504
#define obstack_finish(h)
Definition obstack.h:519
#define obstack_free(h, obj)
Definition obstack.h:533
#define obstack_init(h)
Definition obstack.h:254
#define obstack_next_free(h)
Definition obstack.h:247
#define UNAME_TO_CHARS(name, buf)
Definition sparse_2_k.c:141
int owner_map_translate(uid_t uid, uid_t *new_uid, char const **new_name)
Definition sparse_2_k.c:1328
union block * write_extended(bool global, struct tar_stat_info *st, union block *old_header)
#define MODE_TO_CHARS(val, where)
Definition sparse_2_k.c:145
#define DEFAULT_ALIGNMENT
Definition sparse_2_k.c:34
bool hash_rehash(Hash_table *table, size_t candidate)
Definition sparse_2_k.c:1758
#define S_IXGRP
Definition sparse_2_k.c:153
oldgnu_add_status
Definition sparse_2_k.c:572
@ add_ok
Definition sparse_2_k.c:573
@ add_finish
Definition sparse_2_k.c:574
@ add_fail
Definition sparse_2_k.c:575
#define INT_ADD_OVERFLOW(a, b)
Definition sparse_2_k.c:568
sparse_scan_state
Definition sparse_2_k.c:579
@ scan_block
Definition sparse_2_k.c:581
@ scan_begin
Definition sparse_2_k.c:580
@ scan_end
Definition sparse_2_k.c:582
char * last_component(char const *name)
Definition sparse_2_k.c:866
GLOBAL unsigned tar_sparse_minor
Definition sparse_2_k.c:522
void * hash_insert(Hash_table *table, void const *entry)
Definition sparse_2_k.c:2132
void finish_header(struct tar_stat_info *st, union block *header, off_t block_ordinal)
size_t(* Hash_hasher)(const void *, size_t)
Definition sparse_2_k.c:204
#define PREFIX_FIELD_SIZE
Definition sparse_2_k.c:26
union block * start_header(struct tar_stat_info *st)
Definition sparse_2_k.c:1386
int hash_insert_if_absent(Hash_table *table, void const *entry, void const **matched_ent)
Definition sparse_2_k.c:2043
set_mtime_option_mode
Definition sparse_2_k.c:61
@ CLAMP_MTIME
Definition sparse_2_k.c:64
@ FORCE_MTIME
Definition sparse_2_k.c:63
@ USE_FILE_MTIME
Definition sparse_2_k.c:62
void * x2nrealloc(void *p, size_t *pn, size_t s)
Definition sparse_2_k.c:3330
void _obstack_newchunk(struct obstack *h, _OBSTACK_SIZE_T length)
Definition xheader_k.c:653
#define DEFAULT_ROUNDING
Definition sparse_2_k.c:37
#define STRINGIFY_BIGINT(i, b)
Definition sparse_2_k.c:171
char * dir_name(char const *file)
Definition sparse_2_k.c:2568
enum dump_status sparse_skip_file(struct tar_stat_info *st)
Definition sparse_2_k.c:3867
int hash_insert_if_absent_version_1_32(Hash_table *table, void const *entry, void const **matched_ent)
Definition sparse_2_k.c:1961
#define S_ISUID
Definition sparse_2_k.c:148
void * hash_lookup(const Hash_table *table, const void *entry)
Definition sparse_2_k.c:1273
size_t blocking_write(int fd, void const *buf, size_t count)
Definition sparse_2_k.c:3423
#define MAJOR_TO_CHARS(val, where)
Definition sparse_2_k.c:144
#define GNAME_FIELD_SIZE
Definition sparse_2_k.c:23
#define GNAME_TO_CHARS(name, buf)
Definition sparse_2_k.c:142
#define FILE_SYSTEM_PREFIX_LEN(P)
Definition sparse_2_k.c:109
void xheader_string_add(struct xheader *xhdr, char const *s)
Definition sparse_2_k.c:1071
int _obstack_begin(struct obstack *h, _OBSTACK_SIZE_T size, _OBSTACK_SIZE_T alignment, void *(*chunkfun)(size_t), void(*freefun)(void *))
Definition sparse_2_k.c:846
#define DEFAULT_GROWTH_FACTOR
Definition sparse_2_k.c:274
GLOBAL char const * group_name_option
Definition sparse_2_k.c:202
void xheader_finish(struct xheader *xhdr)
Definition sparse_2_k.c:992
#define S_IRGRP
Definition sparse_2_k.c:151
Hash_table * hash_initialize(size_t candidate, const Hash_tuning *tuning, Hash_hasher hasher, Hash_comparator comparator, Hash_data_freer data_freer)
Definition sparse_2_k.c:2361
void seek_warn_details(char const *name, off_t offset)
Definition sparse_2_k.c:3479
#define GLOBAL_HEADER_TEMPLATE
Definition sparse_2_k.c:28
bool xheader_keyword_deleted_p(const char *kw)
Definition xheader_k.c:488
#define MINOR_TO_CHARS(val, where)
Definition sparse_2_k.c:143
@ TIMESPEC_HZ
Definition sparse_2_k.c:58
const char * archive_format_string(enum archive_format fmt)
Definition sparse_2_k.c:702
GLOBAL struct mode_change * mode_option
Definition sparse_2_k.c:319
char * xheader_ghdr_name(void)
Definition sparse_2_k.c:971
void xheader_string_begin(struct xheader *xhdr)
Definition sparse_2_k.c:1084
void tar_name_copy_str(char *dst, const char *src, size_t len)
Definition create_zen_ar.c:1241
enum dump_status sparse_extract_file(int fd, struct tar_stat_info *st, off_t *size)
Definition sparse_2_k.c:2742
#define COPY_STRING(b, dst, src)
#define COPY_BUF(b, buf, src)
GLOBAL int selinux_context_option
Definition sparse_2_k.c:84
#define DEFAULT_SHRINK_FACTOR
Definition sparse_2_k.c:283
bool(* Hash_comparator)(const void *, const void *)
Definition sparse_2_k.c:205
GLOBAL unsigned tar_sparse_major
Definition sparse_2_k.c:521
#define UNAME_FIELD_SIZE
Definition sparse_2_k.c:22
@ MODE_DONE
Definition sparse_2_k.c:93
@ MODE_ORDINARY_CHANGE
Definition sparse_2_k.c:96
@ MODE_X_IF_ANY_X
Definition sparse_2_k.c:101
@ MODE_COPY_EXISTING
Definition sparse_2_k.c:106
bool xheader_string_end(struct xheader *xhdr, char const *keyword)
Definition sparse_2_k.c:1017
char * stpcpy(char *dest, const char *src)
Definition xheader_k.c:753
int gid_t
Definition sparse_2_k.c:116
void gid_to_gname(int gid, char **gname)
#define NAME_FIELD_SIZE
Definition sparse_2_k.c:25
GLOBAL struct timespec mtime_option
Definition sparse_2_k.c:321
mode_t mode_adjust(mode_t oldmode, bool dir, mode_t umask_value, struct mode_change const *changes, mode_t *pmode_bits)
Definition sparse_2_k.c:1185
void seek_error_details(char const *name, off_t offset)
Definition sparse_2_k.c:3462
GLOBAL bool absolute_names_option
Definition sparse_2_k.c:200
size_t hash_string(const char *string, size_t n_buckets)
Definition sparse_2_k.c:2197
size_t rotr_sz(size_t x, int n)
Definition sparse_2_k.c:2334
GLOBAL int acls_option
Definition sparse_2_k.c:87
void(* Hash_data_freer)(void *)
Definition sparse_2_k.c:206
void uid_to_uname(uid_t uid, char **uname)
bool(* Hash_processor)(void *, void *)
Definition sparse_2_k.c:207
void seek_diag_details(char const *name, off_t offset)
Definition sparse_2_k.c:3497
GLOBAL gid_t group_option
Definition sparse_2_k.c:199
union block * start_private_header(const char *name, size_t size, time_t t)
Definition sparse_2_k.c:896
#define S_ISGID
Definition sparse_2_k.c:149
#define UID_TO_CHARS(val, where)
Definition sparse_2_k.c:146
GLOBAL mode_t initial_umask
Definition sparse_2_k.c:203
void skip_file(off_t size)
Definition tar_1_33.c:4709
#define CHMOD_MODE_BITS
Definition sparse_2_k.c:168
GLOBAL char const * owner_name_option
Definition sparse_2_k.c:201
void simple_finish_header(union block *header)
Definition create_zen_ar.c:743
#define xalloc_oversized(n, s)
Definition sparse_2_k.c:557
void xheader_write(char type, char *name, time_t t, struct xheader *xhdr)
Definition sparse_2_k.c:919
#define DEFAULT_GROWTH_THRESHOLD
Definition sparse_2_k.c:273
GLOBAL enum set_mtime_option_mode set_mtime_option
Definition sparse_2_k.c:78
#define ISSLASH(C)
Definition sparse_2_k.c:110
bool off_to_chars(off_t v, char *p, size_t s)
Definition create_zen_ar.c:1152
char * mdir_name(char const *file)
#define ISDIGIT(c)
Definition sparse_2_k.c:555
bool time_to_chars(time_t v, char *p, size_t s)
Definition create_zen_ar.c:886
#define OFF_TO_CHARS(val, where)
Definition sparse_2_k.c:188
int group_map_translate(gid_t gid, gid_t *new_gid, char const **new_name)
Definition sparse_2_k.c:1292
char * safer_name_suffix(char const *file_name, bool link_target, bool absolute_names)
Definition sparse_2_k.c:2465
#define MAX_OCTAL_VAL(buffer)
Definition sparse_2_k.c:186
char * xheader_format_name(struct tar_stat_info *st, const char *fmt, size_t n)
Definition sparse_2_k.c:2597
GLOBAL int xattrs_option
Definition sparse_2_k.c:81
void xheader_store(char const *keyword, struct tar_stat_info *st, void const *data)
Definition sparse_2_k.c:2998
#define DEFAULT_SHRINK_THRESHOLD
Definition sparse_2_k.c:282
#define TIME_TO_CHARS(val, where)
Definition sparse_2_k.c:189
GLOBAL uid_t owner_option
Definition sparse_2_k.c:198
bool string_ascii_p(char const *p)
Definition create_zen_ar.c:790
int timespec_cmp(struct timespec a, struct timespec b)
Definition sparse_2_k.c:1152
#define GID_TO_CHARS(val, where)
Definition sparse_2_k.c:147
int sys_truncate(int fd)
Definition sparse_2_k.c:3453
#define MODE_ALL
Definition sparse_2_k.c:163
#define S_IWGRP
Definition sparse_2_k.c:152
bool sparse_fixup_header(struct tar_stat_info *st)
Definition sparse_2_k.c:2843
int uid_t
Definition sparse_2_k.c:117
bool sparse_member_p(struct tar_stat_info *st)
Definition sparse_2_k.c:2869
char buf[N_BUF]
Definition spewG.c:36
char * limit
Definition obstack.h:169
struct _obstack_chunk * prev
Definition obstack.h:170
Definition poolTests.c:28
Definition sparse_2_k.c:216
void * data
Definition sparse_2_k.c:217
struct hash_entry * next
Definition sparse_2_k.c:218
Definition sparse_2_k.c:222
size_t n_entries
Definition sparse_2_k.c:230
size_t n_buckets_used
Definition sparse_2_k.c:229
Hash_comparator comparator
Definition sparse_2_k.c:241
size_t n_buckets
Definition sparse_2_k.c:228
struct hash_entry const * bucket_limit
Definition sparse_2_k.c:227
Hash_hasher hasher
Definition sparse_2_k.c:240
const Hash_tuning * tuning
Definition sparse_2_k.c:233
struct hash_entry * free_entry_list
Definition sparse_2_k.c:245
Hash_data_freer data_freer
Definition sparse_2_k.c:242
struct hash_entry * bucket
Definition sparse_2_k.c:226
Definition sparse_2_k.c:256
float growth_threshold
Definition sparse_2_k.c:262
bool is_n_buckets
Definition sparse_2_k.c:264
float shrink_factor
Definition sparse_2_k.c:261
float shrink_threshold
Definition sparse_2_k.c:260
float growth_factor
Definition sparse_2_k.c:263
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
Definition sparse_2_k.c:301
uintmax_t orig_id
Definition sparse_2_k.c:302
char * new_name
Definition sparse_2_k.c:304
uintmax_t new_id
Definition sparse_2_k.c:303
Definition sparse_2_k.c:311
char flag
Definition sparse_2_k.c:313
char op
Definition sparse_2_k.c:312
mode_t mentioned
Definition sparse_2_k.c:316
mode_t value
Definition sparse_2_k.c:315
mode_t affected
Definition sparse_2_k.c:314
off_t numbytes
Definition tar.h:267
off_t offset
Definition tar.h:266
char numbytes[12]
Definition tar.h:100
char offset[12]
Definition tar.h:99
Definition sparse_2_k.c:324
struct tar_sparse_optab const * optab
Definition sparse_2_k.c:332
struct tar_stat_info * stat_info
Definition sparse_2_k.c:331
bool seekable
Definition sparse_2_k.c:326
int fd
Definition sparse_2_k.c:325
off_t dumped_size
Definition sparse_2_k.c:329
off_t offset
Definition sparse_2_k.c:327
void * closure
Definition sparse_2_k.c:333
Definition sparse_2_k.c:586
bool(* scan_block)(struct tar_sparse_file *, enum sparse_scan_state, void *)
Definition sparse_2_k.c:593
bool(* dump_header)(struct tar_sparse_file *)
Definition sparse_2_k.c:590
bool(* sparse_member_p)(struct tar_sparse_file *)
Definition sparse_2_k.c:589
bool(* decode_header)(struct tar_sparse_file *)
Definition sparse_2_k.c:592
bool(* dump_region)(struct tar_sparse_file *, size_t)
Definition sparse_2_k.c:595
bool(* fixup_header)(struct tar_sparse_file *)
Definition sparse_2_k.c:591
bool(* init)(struct tar_sparse_file *)
Definition sparse_2_k.c:587
bool(* done)(struct tar_sparse_file *)
Definition sparse_2_k.c:588
bool(* extract_region)(struct tar_sparse_file *, size_t)
Definition sparse_2_k.c:596
char * acls_a_ptr
Definition tar.h:300
struct sp_array * sparse_map
Definition tar.h:326
char * gname
Definition tar.h:296
struct xheader xhdr
Definition tar.h:340
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
char * acls_d_ptr
Definition tar.h:303
char * file_name
Definition tar.h:289
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
struct timespec ctime
Definition tar.h:312
char * uname
Definition tar.h:295
char * cntx_name
Definition tar.h:298
struct timespec atime
Definition tar.h:310
char * xkey
Definition tar.h:281
Definition tar_1_33.c:3051
void(* coder)(struct tar_stat_info const *, char const *, struct xheader *, void const *data)
Definition tar_1_33.c:3053
char const * keyword
Definition tar_1_33.c:3052
#define TVERSLEN
Definition tar.h:48
#define SPARSES_IN_STAR_EXT_HEADER
Definition tar.h:218
#define SPARSES_IN_STAR_HEADER
Definition tar.h:217
#define XHDTYPE
Definition tar.h:61
#define TMAGIC
Definition tar.h:45
#define SPARSES_IN_SPARSE_HEADER
Definition tar.h:115
#define TMAGLEN
Definition tar.h:46
#define SPARSES_IN_OLDGNU_HEADER
Definition tar.h:114
#define GNUTYPE_SPARSE
Definition tar.h:184
#define REGTYPE
Definition tar.h:51
#define TVERSION
Definition tar.h:47
archive_format
Definition tar.h:251
@ GNU_FORMAT
Definition tar.h:258
@ OLDGNU_FORMAT
Definition tar.h:254
@ DEFAULT_FORMAT
Definition tar.h:252
@ POSIX_FORMAT
Definition tar.h:256
@ STAR_FORMAT
Definition tar.h:257
@ USTAR_FORMAT
Definition tar.h:255
@ V7_FORMAT
Definition tar.h:253
#define AREGTYPE
Definition tar.h:52
#define OLDGNU_MAGIC
Definition tar.h:159
#define XGLTYPE
Definition tar.h:62
#define BLOCKSIZE
Definition tar.h:248
#define S_IROTH
Definition tar_1_33.c:4891
GLOBAL bool incremental_option
Definition tar_1_33.c:3298
#define WARNOPT(opt, args)
Definition tar_1_33.c:3280
char * xstrdup(char const *string)
Safe strdup() that never returns NULL.
Definition tar_1_33.c:3038
enum archive_format current_format
Definition tar_1_33.c:3161
#define WARNING_ENABLED(opt)
Definition tar_1_33.c:3278
void set_next_block_after(union block *block)
Definition tar_1_33.c:5178
#define GLOBAL
Definition tar_1_33.c:3287
#define S_IXOTH
Definition tar_1_33.c:4917
#define OFF_FROM_HEADER(where)
Definition tar_1_33.c:3242
#define WARN_FILE_SHRANK
Definition tar_1_33.c:3252
void assign_string(char **string, const char *value)
Definition tar_1_33.c:5155
#define S_IWOTH
Definition tar_1_33.c:4904
#define UINTMAX_STRSIZE_BOUND
Definition tar_1_33.c:543
#define xmalloc
Definition tar_1_33.c:545
#define S_IRUSR
Definition tar_1_33.c:4885
#define minor_t
Definition tar_1_33.c:663
#define WARN_FAILED_READ
Definition tar_1_33.c:3268
#define major(device)
Definition tar_1_33.c:658
union block * find_next_block(void)
Definition tar_1_33.c:6798
#define TYPE_MAXIMUM(t)
Definition tar_1_33.c:3237
GLOBAL bool ignore_failed_read_option
Definition tar_1_33.c:3294
GLOBAL bool numeric_owner_option
Definition tar_1_33.c:3300
#define S_IWUSR
Definition tar_1_33.c:4898
union block * current_header
Definition tar_1_33.c:3201
dump_status
Definition tar_1_33.c:3095
@ dump_status_ok
Definition tar_1_33.c:3096
@ dump_status_not_implemented
Definition tar_1_33.c:3099
@ dump_status_short
Definition tar_1_33.c:3097
void xheader_destroy(struct xheader *xhdr)
Definition tar_1_33.c:3546
void mv_size_left(off_t size)
Definition tar_1_33.c:4699
#define minor(device)
Definition tar_1_33.c:659
#define S_IXUSR
Definition tar_1_33.c:4911
#define major_t
Definition tar_1_33.c:662
struct posix_header header
Definition tar.h:375
char buffer[BLOCKSIZE]
Definition tar.h:374
struct star_in_header star_in_header
Definition tar.h:379
struct oldgnu_header oldgnu_header
Definition tar.h:377
struct sparse_header sparse_header
Definition tar.h:378
Definition compress42.c:551
#define assume(R)
Definition verify.h:280
#define SEEK_SET
Definition zconf.h:498
#define const
Definition zconf.h:230
#define b(i)
Definition sha256.c:42
#define c(i)
Definition sha256.c:43
#define a(i)
Definition sha256.c:41
#define h(i)
Definition sha256.c:48
#define e(i)
Definition sha256.c:45
void set_exit_status(enum exit_status_type new_status)
Definition main.c:31
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
#define bool
Definition sysdefs.h:146
#define ngettext(msgid1, msgid2, n)
Definition tuklib_gettext.h:40
static uint32_t const uint8_t uint32_t len
Definition memcmplen.h:44
char name[NAME_LEN_MAX+1]
Name of the filter.
Definition string_conversion.c:450
#define header(is_bt, len_min, ret_op)
Definition lz_encoder_mf.c:191
const char * str
Table column heading string.
Definition list.c:109
#define fail(test)
Definition tests.h:31
const char * fmt
Definition message.h:50
#define EINVAL
Definition errno.h:13