/* * read the header for the next archive member */ Armember * getdir(Biobuf *b) { Armember *bp; char *cp; static char name[ARNAMESIZE+1]; bp = newmember(); if(HEADER_IO(Bread, b, bp->hdr)) { free(bp); return 0; } if(strncmp(bp->hdr.fmag, ARFMAG, sizeof(bp->hdr.fmag)) != 0) phaseerr(Boffset(b)); strncpy(name, bp->hdr.name, sizeof(bp->hdr.name)); cp = name+sizeof(name)-1; *cp = '\0'; /* skip trailing spaces and (gnu-produced) slashes */ while(*--cp == ' ' || *cp == '/') ; cp[1] = '\0'; file = name; bp->date = strtol(bp->hdr.date, 0, 0); bp->size = strtol(bp->hdr.size, 0, 0); return bp; }
/* * read the header for the next archive member */ Armember * getdir(Biobuf *b) { Armember *bp; char *cp; static char name[ARNAMESIZE+1]; bp = newmember(); if(HEADER_IO(Bread, b, bp->hdr)) { free(bp); return 0; } if(strncmp(bp->hdr.fmag, ARFMAG, sizeof(bp->hdr.fmag))) phaseerr(Boffset(b)); strncpy(name, bp->hdr.name, sizeof(bp->hdr.name)); cp = name+sizeof(name)-1; while(*--cp==' ') ; cp[1] = '\0'; file = name; bp->date = atol(bp->hdr.date); bp->size = atol(bp->hdr.size); return bp; }