if (didmmap)
if (usemmap)
show_symdef(off_t off, u_long len, const char *name, FILE *fp){	struct ranlib *prn, *eprn;	struct ar_hdr ar_head;	void *symdef;	char *strtab, *p;	u_long size;	int namelen, didmmap, rval = 0;	MMAP(symdef, len, PROT_READ, MAP_PRIVATE|MAP_FILE, fileno(fp), off);	if (symdef == MAP_FAILED)		return (1);	if (didmmap)		(void)madvise(symdef, len, MADV_SEQUENTIAL);	namelen = sizeof(ar_head.ar_name);	if ((p = malloc(sizeof(ar_head.ar_name))) == NULL) {		warn("%s: malloc", name);		MUNMAP(symdef, len);		return (1);	}	size = *(u_long *)symdef;	prn = symdef + sizeof(u_long);	eprn = prn + size / sizeof(*prn);	strtab = symdef + sizeof(u_long) + size + sizeof(u_long);	printf("\nArchive index:\n");	for (; prn < eprn; prn++) {		if (fseeko(fp, prn->ran_off, SEEK_SET)) {			warn("%s: fseeko", name);			rval = 1;			break;		}		if (fread(&ar_head, sizeof(ar_head), 1, fp) != 1 ||		    memcmp(ar_head.ar_fmag, ARFMAG, sizeof(ar_head.ar_fmag))) {			warnx("%s: member fseeko", name);			rval = 1;			break;		}		*p = '\0';		if (mmbr_name(&ar_head, &p, 0, &namelen, fp)) {			rval = 1;			break;		}		printf("%s in %s\n", strtab + prn->ran_un.ran_strx, p);	}	free(p);	MUNMAP(symdef, len);	return (rval);}