mirror of
https://github.com/Stichting-MINIX-Research-Foundation/pkgsrc-ng.git
synced 2025-09-13 06:23:45 -04:00
71 lines
2.4 KiB
C
71 lines
2.4 KiB
C
$NetBSD$
|
|
|
|
--- bfd/archive.c.orig Mon Mar 25 08:06:19 2013
|
|
+++ bfd/archive.c
|
|
@@ -157,6 +157,9 @@ struct ar_cache
|
|
#define ar_maxnamelen(abfd) ((abfd)->xvec->ar_max_namelen)
|
|
|
|
#define arch_eltdata(bfd) ((struct areltdata *) ((bfd)->arelt_data))
|
|
+
|
|
+static const char * normalize (bfd *, const char *);
|
|
+
|
|
#define arch_hdr(bfd) ((struct ar_hdr *) arch_eltdata (bfd)->arch_header)
|
|
|
|
/* True iff NAME designated a BSD 4.4 extended name. */
|
|
@@ -760,7 +763,9 @@ bfd_generic_openr_next_archived_file (bfd *archive, bf
|
|
/* Pad to an even boundary...
|
|
Note that last_file->origin can be odd in the case of
|
|
BSD-4.4-style element with a long odd size. */
|
|
- filestart += filestart % 2;
|
|
+ if (!strncmp(arch_hdr (last_file)->ar_name, "#1/", 3))
|
|
+ size += strlen(normalize(last_file, last_file->filename));
|
|
+ filestart += size % 2;
|
|
}
|
|
|
|
return _bfd_get_elt_at_filepos (archive, filestart);
|
|
@@ -2180,11 +2185,22 @@ _bfd_write_archive_contents (bfd *arch)
|
|
current = current->archive_next)
|
|
{
|
|
char buffer[DEFAULT_BUFFERSIZE];
|
|
- bfd_size_type remaining = arelt_size (current);
|
|
+ bfd_size_type saved_size = arelt_size (current);
|
|
+ bfd_size_type remaining = saved_size;
|
|
+ struct ar_hdr *hdr = arch_hdr (current);
|
|
|
|
/* Write ar header. */
|
|
if (!_bfd_write_ar_hdr (arch, current))
|
|
- return FALSE;
|
|
+ return FALSE;
|
|
+ /* Write filename if it is a 4.4BSD extended file, and add to size. */
|
|
+ if (!strncmp (hdr->ar_name, "#1/", 3))
|
|
+ {
|
|
+ const char *normal = normalize (current, current->filename);
|
|
+ unsigned int thislen = strlen (normal);
|
|
+ if (bfd_write (normal, 1, thislen, arch) != thislen)
|
|
+ return FALSE;
|
|
+ saved_size += thislen;
|
|
+ }
|
|
if (bfd_is_thin_archive (arch))
|
|
continue;
|
|
if (bfd_seek (current, (file_ptr) 0, SEEK_SET) != 0)
|
|
@@ -2457,11 +2473,19 @@ bsd_write_armap (bfd *arch,
|
|
{
|
|
do
|
|
{
|
|
+#if 1
|
|
+ bfd_size_type size = arelt_size (current);
|
|
+ if (!strncmp(arch_hdr (current)->ar_name, "#1/", 3))
|
|
+ size += strlen(normalize(current, current->filename));
|
|
+ firstreal += size + sizeof (struct ar_hdr);
|
|
+ firstreal += size % 2;
|
|
+#else
|
|
struct areltdata *ared = arch_eltdata (current);
|
|
|
|
firstreal += (ared->parsed_size + ared->extra_size
|
|
+ sizeof (struct ar_hdr));
|
|
firstreal += firstreal % 2;
|
|
+#endif
|
|
current = current->archive_next;
|
|
}
|
|
while (current != map[count].u.abfd);
|