- name = (char *) xmalloc(namelen + 1);
- strncpy(name, hdr1.ar_name, namelen);
- name[namelen] = 0;
-
+ starting_offset = subfile_offset + sizeof hdr1;
+ content_length = member_length;
+#ifdef AR_EFMT1
+ /*
+ * BSD 4.4 extended AR format: #1/<namelen>, with name as the
+ * first <namelen> bytes of the file
+ */
+ if ((hdr1.ar_name[0]=='#') &&
+ (hdr1.ar_name[1]=='1') &&
+ (hdr1.ar_name[2]=='/') &&
+ (isdigit(hdr1.ar_name[3])))
+ {
+ namelen = atoi (&hdr1.ar_name[3]);
+ name = (char *) xmalloc(namelen + 1);
+ read (desc, name, namelen);
+ name[namelen] = 0;
+ content_length -= namelen;
+ starting_offset += namelen;
+ } else
+#endif
+ {
+ name = (char *) xmalloc(namelen + 1);
+ strncpy(name, hdr1.ar_name, namelen);
+ name[namelen] = 0;
+ }
+