From: Paul Eggert Date: Fri, 1 Nov 2024 16:40:36 +0000 (-0700) Subject: Prefer idx_t to size_t in xheader.c X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7b278044a7d26d2d62aa6a48d0dbe504cc6e9000;p=thirdparty%2Ftar.git Prefer idx_t to size_t in xheader.c * src/xheader.c (x_obstack_grow, x_obstack_blank) (xheader_format_name, xheader_ghdr_name, xheader_write) (struct xhdr_tab, locate_handler, decode_record, decx, decg) (xheader_read, xattr_encode_keyword, xheader_print_n) (xheader_string_end, dummy_decoder, atime_decoder, gid_decoder) (gname_decoder, linkpath_decoder, ctime_decoder, mtime_decoder) (path_decoder, sparse_path_decoder, size_decoder, uid_decoder) (uname_decoder, sparse_size_decoder, sparse_numblocks_decoder) (sparse_offset_coder, sparse_offset_decoder) (sparse_numbytes_coder, sparse_numbytes_decoder) (sparse_map_decoder, dumpdir_decoder, volume_label_decoder) (volume_size_decoder, volume_offset_decoder) (volume_filename_decoder, xattr_selinux_decoder) (xattr_acls_a_decoder, xattr_acls_d_decoder, xattr_coder) (xattr_decoder, sparse_major_decoder, sparse_minor_decoder): Prefer idx_t to size_t. --- diff --git a/src/xheader.c b/src/xheader.c index a3b41e81..289f386e 100644 --- a/src/xheader.c +++ b/src/xheader.c @@ -52,7 +52,7 @@ static intmax_t global_header_count; /* Interface functions to obstacks */ static void -x_obstack_grow (struct xheader *xhdr, const char *ptr, size_t length) +x_obstack_grow (struct xheader *xhdr, const char *ptr, idx_t length) { obstack_grow (xhdr->stk, ptr, length); xhdr->size += length; @@ -66,7 +66,7 @@ x_obstack_1grow (struct xheader *xhdr, char c) } static void -x_obstack_blank (struct xheader *xhdr, size_t length) +x_obstack_blank (struct xheader *xhdr, idx_t length) { obstack_blank (xhdr->stk, length); xhdr->size += length; @@ -257,7 +257,6 @@ char * xheader_format_name (struct tar_stat_info *st, const char *fmt, intmax_t n) { char *buf; - size_t len; char *q; const char *p; char *dirp = NULL; @@ -268,7 +267,7 @@ xheader_format_name (struct tar_stat_info *st, const char *fmt, intmax_t n) char nbuf[INTMAX_STRSIZE_BOUND]; char const *nptr = NULL; - len = 0; + idx_t len = 0; for (p = fmt; *p; p++) { if (*p == '%' && p[1]) @@ -399,16 +398,16 @@ xheader_ghdr_name (void) { if (!globexthdr_name) { - size_t len; const char *global_header_template = header_template[pax_global_header][posixly_correct]; const char *tmp = getenv ("TMPDIR"); if (!tmp) tmp = "/tmp"; - len = strlen (tmp) + strlen (global_header_template) + 1; - globexthdr_name = xmalloc (len); - strcpy(globexthdr_name, tmp); - strcat(globexthdr_name, global_header_template); + idx_t tmplen = strlen (tmp); + idx_t templatesize = strlen (global_header_template) + 1; + globexthdr_name = ximalloc (tmplen + templatesize); + char *p = mempcpy (globexthdr_name, tmp, tmplen); + memcpy (p, global_header_template, templatesize); } return xheader_format_name (NULL, globexthdr_name, global_header_count + 1); @@ -417,11 +416,7 @@ xheader_ghdr_name (void) void xheader_write (char type, char *name, time_t t, struct xheader *xhdr) { - union block *header; - size_t size; - char *p; - - size = xhdr->size; + idx_t size = xhdr->size; switch (type) { case XGLTYPE: @@ -434,21 +429,17 @@ xheader_write (char type, char *name, time_t t, struct xheader *xhdr) t = exthdr_mtime; break; } - header = start_private_header (name, size, t); + union block *header = start_private_header (name, size, t); header->header.typeflag = type; simple_finish_header (header); - p = xhdr->buffer; + char *p = xhdr->buffer; do { - size_t len; - header = find_next_block (); - len = BLOCKSIZE; - if (len > size) - len = size; + idx_t len = min (size, BLOCKSIZE); memcpy (header->buffer, p, len); if (len < BLOCKSIZE) memset (header->buffer + len, 0, BLOCKSIZE - len); @@ -544,7 +535,7 @@ struct xhdr_tab char const *keyword; void (*coder) (struct tar_stat_info const *, char const *, struct xheader *, void const *data); - void (*decoder) (struct tar_stat_info *, char const *, char const *, size_t); + void (*decoder) (struct tar_stat_info *, char const *, char const *, idx_t); int flags; bool prefix; /* select handler comparing prefix only */ }; @@ -564,7 +555,7 @@ locate_handler (char const *keyword) for (p = xhdr_tab; p->keyword; p++) if (p->prefix) { - size_t kwlen = strlen (p->keyword); + idx_t kwlen = strlen (p->keyword); if (strncmp (p->keyword, keyword, kwlen) == 0 && keyword[kwlen] == '.') return p; } @@ -606,7 +597,7 @@ xheader_protected_keyword_p (const char *keyword) static bool decode_record (struct xheader *xhdr, char **ptr, - void (*handler) (void *, char const *, char const *, size_t), + void (*handler) (void *, char const *, char const *, idx_t), void *data) { char *start = *ptr; @@ -684,7 +675,7 @@ run_override_list (struct keyword_list *kp, struct tar_stat_info *st) } static void -decx (void *data, char const *keyword, char const *value, size_t size) +decx (void *data, char const *keyword, char const *value, idx_t size) { struct xhdr_tab const *t; struct tar_stat_info *st = data; @@ -729,7 +720,7 @@ xheader_decode (struct tar_stat_info *st) static void decg (void *data, char const *keyword, char const *value, - MAYBE_UNUSED size_t size) + MAYBE_UNUSED idx_t size) { struct keyword_list **kwl = data; struct xhdr_tab const *tab = locate_handler (keyword); @@ -783,12 +774,12 @@ xheader_store (char const *keyword, struct tar_stat_info *st, void xheader_read (struct xheader *xhdr, union block *p, off_t size) { - size_t j = 0; + idx_t j = 0; if (size < 0) size = 0; /* Already diagnosed. */ - size_t size_plus_1; + idx_t size_plus_1; if (ckd_add (&size_plus_1, size, BLOCKSIZE + 1)) xalloc_die (); size = size_plus_1 - 1; @@ -799,14 +790,10 @@ xheader_read (struct xheader *xhdr, union block *p, off_t size) do { - size_t len = size; - - if (len > BLOCKSIZE) - len = BLOCKSIZE; - if (!p) paxfatal (0, _("Unexpected EOF in archive")); + idx_t len = min (size, BLOCKSIZE); memcpy (&xhdr->buffer[j], p->buffer, len); set_next_block_after (p); @@ -828,66 +815,55 @@ xheader_read (struct xheader *xhdr, union block *p, off_t size) (http://lists.gnu.org/archive/html/bug-tar/2012-10/msg00017.html) */ static char * -xattr_encode_keyword(const char *keyword) +xattr_encode_keyword (char const *keyword) { static char *encode_buffer = NULL; - static size_t encode_buffer_size = 0; - size_t bp; /* keyword/buffer pointers */ - - if (!encode_buffer) - { - encode_buffer_size = 256; - encode_buffer = xmalloc (encode_buffer_size); - } - else - *encode_buffer = 0; + static idx_t encode_buffer_size = 0; - for (bp = 0; *keyword != 0; ++bp, ++keyword) + for (idx_t bp = 0; ; ) { - char c = *keyword; - - if (bp + 3 /* enough for URL encoding also.. */ >= encode_buffer_size) - { - encode_buffer = x2realloc (encode_buffer, &encode_buffer_size); - } + if (encode_buffer_size < bp + 3 /* enough for URL encoding also.. */) + encode_buffer = xpalloc (encode_buffer, &encode_buffer_size, 3, -1, 1); - if (c == '%') - { - strcpy (encode_buffer + bp, "%25"); - bp += 2; - } - else if (c == '=') - { - strcpy (encode_buffer + bp, "%3D"); - bp += 2; - } - else - encode_buffer[bp] = c; + char c = *keyword++; + switch (c) + { + case '%': + memcpy (encode_buffer + bp, "%25", 3); + bp += 3; + break; + + case '=': + memcpy (encode_buffer + bp, "%3D", 3); + bp += 3; + break; + + default: + encode_buffer[bp++] = c; + if (!c) + return encode_buffer; + break; + } } - - encode_buffer[bp] = 0; - - return encode_buffer; } static void xheader_print_n (struct xheader *xhdr, char const *keyword, - char const *value, size_t vsize) + char const *value, idx_t vsize) { - size_t p; - size_t n = 0; - char nbuf[UINTMAX_STRSIZE_BOUND]; + idx_t p; + idx_t n = 0; + char nbuf[INTMAX_STRSIZE_BOUND]; char const *np; - size_t len, klen; keyword = xattr_encode_keyword (keyword); - klen = strlen (keyword); - len = klen + vsize + 3; /* ' ' + '=' + '\n' */ + idx_t klen = strlen (keyword); + idx_t len = klen + vsize + 3; /* ' ' + '=' + '\n' */ do { p = n; - np = umaxtostr (len + p, nbuf); + np = imaxtostr (len + p, nbuf); n = nbuf + sizeof nbuf - 1 - np; } while (n != p); @@ -957,7 +933,6 @@ xheader_string_end (struct xheader *xhdr, char const *keyword) uintmax_t len; uintmax_t p; uintmax_t n = 0; - size_t size; char nbuf[UINTMAX_STRSIZE_BOUND]; char const *np; char *cp; @@ -977,7 +952,7 @@ xheader_string_end (struct xheader *xhdr, char const *keyword) while (n != p); p = strlen (keyword) + n + 2; - size = p; + idx_t size = p; if (size != p) { paxerror (0, @@ -1136,7 +1111,7 @@ static void dummy_decoder (MAYBE_UNUSED struct tar_stat_info *st, MAYBE_UNUSED char const *keyword, MAYBE_UNUSED char const *arg, - MAYBE_UNUSED size_t size) + MAYBE_UNUSED idx_t size) { } @@ -1151,7 +1126,7 @@ static void atime_decoder (struct tar_stat_info *st, char const *keyword, char const *arg, - MAYBE_UNUSED size_t size) + MAYBE_UNUSED idx_t size) { struct timespec ts; if (decode_time (&ts, arg, keyword)) @@ -1170,7 +1145,7 @@ static void gid_decoder (struct tar_stat_info *st, char const *keyword, char const *arg, - MAYBE_UNUSED size_t size) + MAYBE_UNUSED idx_t size) { intmax_t u; if (decode_signed_num (&u, arg, TYPE_MINIMUM (gid_t), @@ -1189,7 +1164,7 @@ static void gname_decoder (struct tar_stat_info *st, MAYBE_UNUSED char const *keyword, char const *arg, - MAYBE_UNUSED size_t size) + MAYBE_UNUSED idx_t size) { decode_string (&st->gname, arg); } @@ -1205,7 +1180,7 @@ static void linkpath_decoder (struct tar_stat_info *st, MAYBE_UNUSED char const *keyword, char const *arg, - MAYBE_UNUSED size_t size) + MAYBE_UNUSED idx_t size) { decode_string (&st->link_name, arg); } @@ -1221,7 +1196,7 @@ static void ctime_decoder (struct tar_stat_info *st, char const *keyword, char const *arg, - MAYBE_UNUSED size_t size) + MAYBE_UNUSED idx_t size) { struct timespec ts; if (decode_time (&ts, arg, keyword)) @@ -1240,7 +1215,7 @@ static void mtime_decoder (struct tar_stat_info *st, char const *keyword, char const *arg, - MAYBE_UNUSED size_t size) + MAYBE_UNUSED idx_t size) { struct timespec ts; if (decode_time (&ts, arg, keyword)) @@ -1270,7 +1245,7 @@ static void path_decoder (struct tar_stat_info *st, MAYBE_UNUSED char const *keyword, char const *arg, - MAYBE_UNUSED size_t size) + MAYBE_UNUSED idx_t size) { if (! st->sparse_name_done) raw_path_decoder (st, arg); @@ -1280,7 +1255,7 @@ static void sparse_path_decoder (struct tar_stat_info *st, MAYBE_UNUSED char const *keyword, char const *arg, - MAYBE_UNUSED size_t size) + MAYBE_UNUSED idx_t size) { st->sparse_name_done = true; raw_path_decoder (st, arg); @@ -1297,7 +1272,7 @@ static void size_decoder (struct tar_stat_info *st, char const *keyword, char const *arg, - MAYBE_UNUSED size_t size) + MAYBE_UNUSED idx_t size) { uintmax_t u; if (decode_num (&u, arg, TYPE_MAXIMUM (off_t), keyword)) @@ -1316,7 +1291,7 @@ static void uid_decoder (struct tar_stat_info *st, char const *keyword, char const *arg, - MAYBE_UNUSED size_t size) + MAYBE_UNUSED idx_t size) { intmax_t u; if (decode_signed_num (&u, arg, TYPE_MINIMUM (uid_t), @@ -1335,7 +1310,7 @@ static void uname_decoder (struct tar_stat_info *st, MAYBE_UNUSED char const *keyword, char const *arg, - MAYBE_UNUSED size_t size) + MAYBE_UNUSED idx_t size) { decode_string (&st->uname, arg); } @@ -1351,7 +1326,7 @@ static void sparse_size_decoder (struct tar_stat_info *st, char const *keyword, char const *arg, - MAYBE_UNUSED size_t size) + MAYBE_UNUSED idx_t size) { uintmax_t u; if (decode_num (&u, arg, TYPE_MAXIMUM (off_t), keyword)) @@ -1373,7 +1348,7 @@ static void sparse_numblocks_decoder (struct tar_stat_info *st, char const *keyword, char const *arg, - MAYBE_UNUSED size_t size) + MAYBE_UNUSED idx_t size) { uintmax_t u; if (decode_num (&u, arg, SIZE_MAX, keyword)) @@ -1388,7 +1363,7 @@ static void sparse_offset_coder (struct tar_stat_info const *st, char const *keyword, struct xheader *xhdr, void const *data) { - size_t const *pi = data; + idx_t const *pi = data; code_num (st->sparse_map[*pi].offset, keyword, xhdr); } @@ -1396,7 +1371,7 @@ static void sparse_offset_decoder (struct tar_stat_info *st, char const *keyword, char const *arg, - MAYBE_UNUSED size_t size) + MAYBE_UNUSED idx_t size) { uintmax_t u; if (decode_num (&u, arg, TYPE_MAXIMUM (off_t), keyword)) @@ -1413,7 +1388,7 @@ static void sparse_numbytes_coder (struct tar_stat_info const *st, char const *keyword, struct xheader *xhdr, void const *data) { - size_t const *pi = data; + idx_t const *pi = data; code_num (st->sparse_map[*pi].numbytes, keyword, xhdr); } @@ -1421,7 +1396,7 @@ static void sparse_numbytes_decoder (struct tar_stat_info *st, char const *keyword, char const *arg, - MAYBE_UNUSED size_t size) + MAYBE_UNUSED idx_t size) { uintmax_t u; if (decode_num (&u, arg, TYPE_MAXIMUM (off_t), keyword)) @@ -1438,7 +1413,7 @@ static void sparse_map_decoder (struct tar_stat_info *st, char const *keyword, char const *arg, - MAYBE_UNUSED size_t size) + MAYBE_UNUSED idx_t size) { bool offset = true; struct sp_array e; @@ -1517,9 +1492,9 @@ static void dumpdir_decoder (struct tar_stat_info *st, MAYBE_UNUSED char const *keyword, char const *arg, - size_t size) + idx_t size) { - st->dumpdir = xmalloc (size); + st->dumpdir = ximalloc (size); memcpy (st->dumpdir, arg, size); } @@ -1535,7 +1510,7 @@ static void volume_label_decoder (MAYBE_UNUSED struct tar_stat_info *st, MAYBE_UNUSED char const *keyword, char const *arg, - MAYBE_UNUSED size_t size) + MAYBE_UNUSED idx_t size) { decode_string (&volume_label, arg); } @@ -1552,7 +1527,7 @@ volume_size_coder (MAYBE_UNUSED struct tar_stat_info const *st, static void volume_size_decoder (MAYBE_UNUSED struct tar_stat_info *st, char const *keyword, - char const *arg, MAYBE_UNUSED size_t size) + char const *arg, MAYBE_UNUSED idx_t size) { uintmax_t u; if (decode_num (&u, arg, TYPE_MAXIMUM (uintmax_t), keyword)) @@ -1572,7 +1547,7 @@ volume_offset_coder (MAYBE_UNUSED struct tar_stat_info const *st, static void volume_offset_decoder (MAYBE_UNUSED struct tar_stat_info *st, char const *keyword, - char const *arg, MAYBE_UNUSED size_t size) + char const *arg, MAYBE_UNUSED idx_t size) { uintmax_t u; if (decode_num (&u, arg, TYPE_MAXIMUM (uintmax_t), keyword)) @@ -1583,7 +1558,7 @@ static void volume_filename_decoder (MAYBE_UNUSED struct tar_stat_info *st, MAYBE_UNUSED char const *keyword, char const *arg, - MAYBE_UNUSED size_t size) + MAYBE_UNUSED idx_t size) { decode_string (&continued_file_name, arg); } @@ -1598,7 +1573,7 @@ xattr_selinux_coder (struct tar_stat_info const *st, char const *keyword, static void xattr_selinux_decoder (struct tar_stat_info *st, MAYBE_UNUSED char const *keyword, char const *arg, - MAYBE_UNUSED size_t size) + MAYBE_UNUSED idx_t size) { decode_string (&st->cntx_name, arg); } @@ -1613,7 +1588,7 @@ xattr_acls_a_coder (struct tar_stat_info const *st , char const *keyword, static void xattr_acls_a_decoder (struct tar_stat_info *st, MAYBE_UNUSED char const *keyword, - char const *arg, size_t size) + char const *arg, idx_t size) { st->acls_a_ptr = xmemdup (arg, size + 1); st->acls_a_len = size; @@ -1629,7 +1604,7 @@ xattr_acls_d_coder (struct tar_stat_info const *st , char const *keyword, static void xattr_acls_d_decoder (struct tar_stat_info *st, MAYBE_UNUSED char const *keyword, char const *arg, - size_t size) + idx_t size) { st->acls_d_ptr = xmemdup (arg, size + 1); st->acls_d_len = size; @@ -1639,7 +1614,8 @@ static void xattr_coder (struct tar_stat_info const *st, char const *keyword, struct xheader *xhdr, void const *data) { - size_t n = *(size_t *)data; + idx_t const *idx_data = data; + idx_t n = *idx_data; xheader_print_n (xhdr, keyword, st->xattr_map.xm_map[n].xval_ptr, st->xattr_map.xm_map[n].xval_len); @@ -1647,7 +1623,7 @@ xattr_coder (struct tar_stat_info const *st, char const *keyword, static void xattr_decoder (struct tar_stat_info *st, - char const *keyword, char const *arg, size_t size) + char const *keyword, char const *arg, idx_t size) { char *xkey; @@ -1672,7 +1648,7 @@ static void sparse_major_decoder (struct tar_stat_info *st, char const *keyword, char const *arg, - MAYBE_UNUSED size_t size) + MAYBE_UNUSED idx_t size) { uintmax_t u; if (decode_num (&u, arg, INTMAX_MAX, keyword)) @@ -1690,7 +1666,7 @@ static void sparse_minor_decoder (struct tar_stat_info *st, char const *keyword, char const *arg, - MAYBE_UNUSED size_t size) + MAYBE_UNUSED idx_t size) { uintmax_t u; if (decode_num (&u, arg, INTMAX_MAX, keyword))