void xheader_decode (struct tar_stat_info *st) { run_override_list (keyword_global_override_list, st); run_override_list (global_header_override_list, st); if (st->xhdr.size) { char *p = st->xhdr.buffer + BLOCKSIZE; while (decode_record (&st->xhdr, &p, decx, st)) continue; } run_override_list (keyword_override_list, st); }
void xheader_decode (struct tar_stat_info *st) { run_override_list (keyword_global_override_list, st); run_override_list (global_header_override_list, st); if (st->xhdr.size) { char *p = st->xhdr.buffer + BLOCKSIZE; while (decode_record (&st->xhdr, &p, decx, st)) continue; } run_override_list (keyword_override_list, st); /* The archived (effective) file size is always set directly in tar header field, possibly overridden by "size" extended header - in both cases, result is now decoded in st->stat.st_size */ st->archive_file_size = st->stat.st_size; /* The real file size (given by stat()) may be redefined for sparse files in "GNU.sparse.realsize" extended header */ if (st->real_size_set) st->stat.st_size = st->real_size; }