|
|
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.