X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Flist.c;h=8a97b03786aa532f5f7ea12cccbe563ff1e6c91f;hb=250db35f17d7700f4d209fd086b7dbc5b7ebe88f;hp=d6768d936687311d3208557e86a457caabc1cede;hpb=6f929b2c8998bab44ca81b01cd8e1381fb6e9dfe;p=chaz%2Ftar diff --git a/src/list.c b/src/list.c index d6768d9..8a97b03 100644 --- a/src/list.c +++ b/src/list.c @@ -76,7 +76,6 @@ read_and (void (*do_something) (void)) { prev_status = status; tar_stat_destroy (¤t_stat_info); - xheader_destroy (&extended_header); status = read_header (false); switch (status) @@ -387,12 +386,16 @@ read_header_primitive (bool raw_extended_headers, struct tar_stat_info *info) } else if (header->header.typeflag == XHDTYPE || header->header.typeflag == SOLARIS_XHDTYPE) - xheader_read (header, OFF_FROM_HEADER (header->header.size)); + xheader_read (&info->xhdr, header, + OFF_FROM_HEADER (header->header.size)); else if (header->header.typeflag == XGLTYPE) { - xheader_read (header, OFF_FROM_HEADER (header->header.size)); - xheader_decode_global (); - xheader_destroy (&extended_header); + struct xheader xhdr; + memset (&xhdr, 0, sizeof xhdr); + xheader_read (&xhdr, header, + OFF_FROM_HEADER (header->header.size)); + xheader_decode_global (&xhdr); + xheader_destroy (&xhdr); } /* Loop! */ @@ -518,7 +521,7 @@ decode_header (union block *header, struct tar_stat_info *stat_info, && ISOCTAL (header->star_header.ctime[0]) && header->star_header.ctime[11] == ' ') format = STAR_FORMAT; - else if (extended_header.size) + else if (stat_info->xhdr.size) format = POSIX_FORMAT; else format = USTAR_FORMAT;