Updating global headers in update mode is not possible, because:
1) If the original archive was not in PAX format, writing the
global header would overwrite first member header (and eventually
data blocks) in the archive.
2) Otherwise, using the --pax-option can make the updated header
occupy more blocks than the original one, which would lead to the
same effect as in 1.
This also fixes
http://lists.gnu.org/archive/html/bug-tar/2018-12/msg00007.html
* src/xheader.c (xheader_forbid_global): New function.
* src/common.h (xheader_forbid_global): New prototype.
* src/update.c (update_archive): Use xheader_forbid_global, instead
of trying to write global extended header record.
void xheader_read (struct xheader *xhdr, union block *header, off_t size);
void xheader_write (char type, char *name, time_t t, struct xheader *xhdr);
void xheader_write_global (struct xheader *xhdr);
+void xheader_forbid_global (void);
void xheader_finish (struct xheader *hdr);
void xheader_destroy (struct xheader *hdr);
char *xheader_xhdr_name (struct tar_stat_info *st);
name_gather ();
open_archive (ACCESS_UPDATE);
- buffer_write_global_xheader ();
+ xheader_forbid_global ();
while (!found_end)
{
}
}
+/* Forbid modifications of the global extended header */
+void
+xheader_forbid_global (void)
+{
+ if (keyword_global_override_list)
+ USAGE_ERROR ((0, 0, _("can't update global extended header record")));
+}
+
void
xheader_xattr_init (struct tar_stat_info *st)
{