|
|
1.1 ! root 1: /* ! 2: * ldahread - fill archive file member header info. ! 3: * ! 4: * #ifdef PORTAR printable ascii header archive version ! 5: * #else #ifdef PORT5AR UNIX 5.0 semi-portable archive version ! 6: * #else pre-UNIX 5.0 (old) archive version ! 7: * #endif ! 8: */ ! 9: ! 10: #include <stdio.h> ! 11: #include <ar.h> ! 12: #include "filehdr.h" ! 13: #include "ldfcn.h" ! 14: ! 15: int ! 16: ldahread(ldptr, arhead) ! 17: LDFILE *ldptr; ! 18: ARCHDR *arhead; ! 19: { ! 20: extern int fseek(); ! 21: extern int fread(); ! 22: extern long sgetl(); ! 23: extern int vldldptr(); ! 24: ! 25: #ifdef PORTAR ! 26: struct ar_hdr arbuf; ! 27: ! 28: if (vldldptr(ldptr) == SUCCESS && TYPE(ldptr) == ARTYPE && ! 29: FSEEK(ldptr, -((long)sizeof(arbuf)), BEGINNING) == OKFSEEK && ! 30: FREAD((char *)&arbuf, sizeof(arbuf), 1, ldptr) == 1 && ! 31: !strncmp(arbuf.ar_fmag, ARFMAG, sizeof(arbuf.ar_fmag))) ! 32: { ! 33: register char *cp = arbuf.ar_name + sizeof(arbuf.ar_name); ! 34: ! 35: while (*--cp == ' ') ! 36: ; ! 37: if (*cp == '/') ! 38: *cp = '\0'; ! 39: else ! 40: *++cp = '\0'; ! 41: (void)strncpy(arhead->ar_name, arbuf.ar_name, ! 42: sizeof(arbuf.ar_name)); ! 43: if (sscanf(arbuf.ar_date, "%ld", &arhead->ar_date) == 1 && ! 44: sscanf(arbuf.ar_uid, "%d", &arhead->ar_uid) == 1 && ! 45: sscanf(arbuf.ar_gid, "%d", &arhead->ar_gid) == 1 && ! 46: sscanf(arbuf.ar_mode, "%o", &arhead->ar_mode) == 1 && ! 47: sscanf(arbuf.ar_size, "%ld", &arhead->ar_size) == 1) ! 48: { ! 49: return (SUCCESS); ! 50: } ! 51: } ! 52: #else ! 53: #ifdef PORT5AR ! 54: struct arf_hdr arbuf; ! 55: ! 56: if (vldldptr(ldptr) == SUCCESS && TYPE(ldptr) == ARTYPE && ! 57: FSEEK(ldptr, -((long)sizeof(arbuf)), BEGINNING) == OKFSEEK && ! 58: FREAD((char *)&arbuf, sizeof(arbuf), 1, ldptr) == 1) ! 59: { ! 60: (void)strncpy(arhead->ar_name, arbuf.arf_name, ! 61: sizeof(arbuf.arf_name)); ! 62: arhead->ar_date = sgetl(arbuf.arf_date); ! 63: arhead->ar_uid = sgetl(arbuf.arf_uid); ! 64: arhead->ar_gid = sgetl(arbuf.arf_gid); ! 65: arhead->ar_mode = sgetl(arbuf.arf_mode); ! 66: arhead->ar_size = sgetl(arbuf.arf_size); ! 67: return (SUCCESS); ! 68: } ! 69: #else ! 70: if (vldldptr(ldptr) == SUCCESS && TYPE(ldptr) == ARTYPE && ! 71: FSEEK(ldptr, -((long) ARCHSZ), BEGINNING) == OKFSEEK && ! 72: FREAD((char *)arhead, ARCHSZ, 1, ldptr) == 1) ! 73: { ! 74: return (SUCCESS); ! 75: } ! 76: #endif ! 77: #endif ! 78: return (FAILURE); ! 79: } ! 80: ! 81: static char ID[] = "@(#) ldahread.c: 1.4 3/3/83";
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.