bfd_ar_hdr_from_filesystem (abfd, filename)
bfd_ar_hdr_from_filesystem (abfd, filename, member)
bfd_ar_hdr_from_filesystem (abfd, filename)     bfd *abfd;     const char *filename;{  struct stat status;  struct areltdata *ared;  struct ar_hdr *hdr;  char *temp, *temp1;  if (stat (filename, &status) != 0)    {      bfd_set_error (bfd_error_system_call);      return NULL;    }  ared = (struct areltdata *) bfd_zalloc (abfd, sizeof (struct ar_hdr) +					  sizeof (struct areltdata));  if (ared == NULL)    return NULL;  hdr = (struct ar_hdr *) (((char *) ared) + sizeof (struct areltdata));  /* ar headers are space padded, not null padded! */  memset ((PTR) hdr, ' ', sizeof (struct ar_hdr));  strncpy (hdr->ar_fmag, ARFMAG, 2);  /* Goddamned sprintf doesn't permit MAXIMUM field lengths */  sprintf ((hdr->ar_date), "%-12ld", (long) status.st_mtime);  sprintf ((hdr->ar_uid), "%ld", (long) status.st_uid);  sprintf ((hdr->ar_gid), "%ld", (long) status.st_gid);  sprintf ((hdr->ar_mode), "%-8o", (unsigned int) status.st_mode);  sprintf ((hdr->ar_size), "%-10ld", (long) status.st_size);  /* Correct for a lossage in sprintf whereby it null-terminates.  I cannot     understand how these C losers could design such a ramshackle bunch of     IO operations */  temp = (char *) hdr;  temp1 = temp + sizeof (struct ar_hdr) - 2;  for (; temp < temp1; temp++)    {      if (*temp == '\0')	*temp = ' ';    }  strncpy (hdr->ar_fmag, ARFMAG, 2);  ared->parsed_size = status.st_size;  ared->arch_header = (char *) hdr;  return ared;}