X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fxheader.c;h=11b725e06622c082a0255a2fbf5c8cd3419c39cd;hb=8e3f3adf9888cca4acedfe005d277867c999fcb3;hp=2948859ab076180a69f36807dca282d841409d05;hpb=e359fad6413c3fbff4d862e535c6e78e92d6d44e;p=chaz%2Ftar diff --git a/src/xheader.c b/src/xheader.c index 2948859..11b725e 100644 --- a/src/xheader.c +++ b/src/xheader.c @@ -225,7 +225,7 @@ xheader_set_option (char *string) to the result of the basename utility on the translated file name. %p The process ID of the pax process. - %n The value of the 3rd argument. + %n The value of the 3rd argument. %% A '%' character. */ char * @@ -264,7 +264,7 @@ xheader_format_name (struct tar_stat_info *st, const char *fmt, size_t n) case 'f': if (st) { - base = base_name (st->orig_file_name); + base = last_component (st->orig_file_name); len += strlen (base) - 2; } break; @@ -331,7 +331,7 @@ xheader_format_name (struct tar_stat_info *st, const char *fmt, size_t n) } free (dirp); - + /* Do not allow it to end in a slash */ while (q > buf && ISSLASH (q[-1])) q--; @@ -508,7 +508,7 @@ decode_record (char **ptr, ERROR ((0, 0, _("Extended header length is out of allowed range"))); return false; } - + if (len_max < len) { int len_len = len_lim - p; @@ -647,12 +647,10 @@ void xheader_read (union block *p, size_t size) { size_t j = 0; - size_t nblocks; free (extended_header.buffer); size += BLOCKSIZE; extended_header.size = size; - nblocks = (size + BLOCKSIZE - 1) / BLOCKSIZE; extended_header.buffer = xmalloc (size + 1); extended_header.buffer[size] = '\0'; @@ -956,7 +954,7 @@ decode_time (struct timespec *ts, char const *arg, char const *keyword) return true; } - + static void code_num (uintmax_t value, char const *keyword, struct xheader *xhdr) @@ -1094,9 +1092,10 @@ ctime_decoder (struct tar_stat_info *st, static void mtime_coder (struct tar_stat_info const *st, char const *keyword, - struct xheader *xhdr, void const *data __attribute__ ((unused))) + struct xheader *xhdr, void const *data) { - code_time (st->mtime, keyword, xhdr); + struct timespec const *mtime = data; + code_time (mtime ? *mtime : st->mtime, keyword, xhdr); } static void @@ -1380,8 +1379,8 @@ static void volume_size_coder (struct tar_stat_info const *st, char const *keyword, struct xheader *xhdr, void const *data) { - off_t v = *(off_t*)data; - code_num (v, keyword, xhdr); + off_t const *v = data; + code_num (*v, keyword, xhdr); } static void @@ -1399,8 +1398,8 @@ static void volume_offset_coder (struct tar_stat_info const *st, char const *keyword, struct xheader *xhdr, void const *data) { - off_t v = *(off_t*)data; - code_num (v, keyword, xhdr); + off_t const *v = data; + code_num (*v, keyword, xhdr); } static void @@ -1439,12 +1438,12 @@ sparse_major_decoder (struct tar_stat_info *st, if (decode_num (&u, arg, TYPE_MAXIMUM (unsigned), keyword)) st->sparse_major = u; } - + static void sparse_minor_coder (struct tar_stat_info const *st, char const *keyword, struct xheader *xhdr, void const *data) { - code_num (st->sparse_minor, keyword, xhdr); + code_num (st->sparse_minor, keyword, xhdr); } static void @@ -1457,7 +1456,7 @@ sparse_minor_decoder (struct tar_stat_info *st, if (decode_num (&u, arg, TYPE_MAXIMUM (unsigned), keyword)) st->sparse_minor = u; } - + struct xhdr_tab const xhdr_tab[] = { { "atime", atime_coder, atime_decoder, false }, { "comment", dummy_coder, dummy_decoder, false },