Annotation of researchv9/jerq/sgs/libld/ldahread.c, revision 1.1.1.1

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";

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.