- if (prefix_len)
- {
- static int warned_once;
- if (!warned_once)
- {
- warned_once = 1;
- WARN ((0, 0, _("Removing leading `%.*s' from member names"),
- (int) prefix_len, name));
- }
- name += prefix_len;
- }
- }
+ if (extended_header.buffer || extended_header.stk == NULL)
+ return old_header; /* Prevent recursion */
+
+ xheader_finish (&extended_header);
+ size = extended_header.size;
+ memset (&foo, 0, sizeof foo);
+ foo.stat.st_mode = S_IFREG|S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH;
+ time (&foo.stat.st_ctime);
+ foo.stat.st_atime = foo.stat.st_ctime;
+ foo.stat.st_mtime = foo.stat.st_ctime;
+ foo.stat.st_size = size;
+
+ memcpy (hp.buffer, old_header, sizeof (hp));
+
+ header = start_header ("././@PaxHeader", &foo);
+ header->header.typeflag = type;
+
+ finish_header (header, -1);
+
+ p = extended_header.buffer;
+
+ do
+ {
+ size_t len;
+
+ header = find_next_block ();
+ len = BLOCKSIZE;
+ if (len > size)
+ len = size;
+ memcpy (header->buffer, p, len);
+ if (len < BLOCKSIZE)
+ memset (header->buffer + len, 0, BLOCKSIZE - len);
+ p += len;
+ size -= len;
+ set_next_block_after (header);