Lines 295-305
Link Here
|
295 |
FILE is the name of the file (for error messages). */ |
295 |
FILE is the name of the file (for error messages). */ |
296 |
|
296 |
|
297 |
void |
297 |
void |
298 |
mywrite (desc, pbuf, bytes, file) |
298 |
mywrite (int desc, void *pbuf, int bytes, char *file) |
299 |
int desc; |
|
|
300 |
void *pbuf; |
301 |
int bytes; |
302 |
char *file; |
303 |
{ |
299 |
{ |
304 |
register int val; |
300 |
register int val; |
305 |
register char * buf = pbuf; |
301 |
register char * buf = pbuf; |
Lines 315-323
Link Here
|
315 |
} |
311 |
} |
316 |
|
312 |
|
317 |
int |
313 |
int |
318 |
main (argc, argv) |
314 |
main (int argc, char **argv) |
319 |
int argc; |
|
|
320 |
char **argv; |
321 |
{ |
315 |
{ |
322 |
int i; |
316 |
int i; |
323 |
|
317 |
|
Lines 513-525
Link Here
|
513 |
} |
507 |
} |
514 |
|
508 |
|
515 |
void |
509 |
void |
516 |
scan (function, crflag) |
510 |
scan ( |
517 |
#ifdef __STDC__ |
511 |
#ifdef __STDC__ |
518 |
void (*function) (struct member_desc member, FILE *istream); |
512 |
void (*function) (struct member_desc member, FILE *istream), |
519 |
#else |
513 |
#else |
520 |
void (*function) (); |
514 |
void (*function) (), |
521 |
#endif |
515 |
#endif |
522 |
int crflag; |
516 |
int crflag) |
523 |
{ |
517 |
{ |
524 |
FILE *arcstream = fopen (archive, "r"); |
518 |
FILE *arcstream = fopen (archive, "r"); |
525 |
|
519 |
|
Lines 601-609
Link Here
|
601 |
} |
595 |
} |
602 |
|
596 |
|
603 |
void |
597 |
void |
604 |
print_descr (member, instream) |
598 |
print_descr (struct member_desc member, FILE * instream) |
605 |
struct member_desc member; |
|
|
606 |
FILE * instream; |
607 |
{ |
599 |
{ |
608 |
char *timestring; |
600 |
char *timestring; |
609 |
if (!verbose) |
601 |
if (!verbose) |
Lines 620-627
Link Here
|
620 |
} |
612 |
} |
621 |
|
613 |
|
622 |
void |
614 |
void |
623 |
print_modes (modes) |
615 |
print_modes (int modes) |
624 |
int modes; |
|
|
625 |
{ |
616 |
{ |
626 |
putchar (modes & 0400 ? 'r' : '-'); |
617 |
putchar (modes & 0400 ? 'r' : '-'); |
627 |
putchar (modes & 0200 ? 'w' : '-'); |
618 |
putchar (modes & 0200 ? 'w' : '-'); |
Lines 637-645
Link Here
|
637 |
#define BUFSIZE 1024 |
628 |
#define BUFSIZE 1024 |
638 |
|
629 |
|
639 |
void |
630 |
void |
640 |
extract_member (member, istream) |
631 |
extract_member (struct member_desc member, FILE *istream) |
641 |
struct member_desc member; |
|
|
642 |
FILE *istream; |
643 |
{ |
632 |
{ |
644 |
int ncopied = 0; |
633 |
int ncopied = 0; |
645 |
FILE *ostream; |
634 |
FILE *ostream; |
Lines 695-703
Link Here
|
695 |
} |
684 |
} |
696 |
|
685 |
|
697 |
void |
686 |
void |
698 |
print_contents (member, istream) |
687 |
print_contents (struct member_desc member, FILE *istream) |
699 |
struct member_desc member; |
|
|
700 |
FILE *istream; |
701 |
{ |
688 |
{ |
702 |
int ncopied = 0; |
689 |
int ncopied = 0; |
703 |
|
690 |
|
Lines 729-736
Link Here
|
729 |
create a new archive. */ |
716 |
create a new archive. */ |
730 |
|
717 |
|
731 |
struct mapelt * |
718 |
struct mapelt * |
732 |
make_map (nonexistent_ok) |
719 |
make_map (int nonexistent_ok) |
733 |
int nonexistent_ok; |
|
|
734 |
{ |
720 |
{ |
735 |
struct mapelt mapstart; |
721 |
struct mapelt mapstart; |
736 |
mapstart.next = 0; |
722 |
mapstart.next = 0; |
Lines 740-748
Link Here
|
740 |
} |
726 |
} |
741 |
|
727 |
|
742 |
void |
728 |
void |
743 |
add_to_map (member, istream) |
729 |
add_to_map (struct member_desc member, FILE * istream) |
744 |
struct member_desc member; |
|
|
745 |
FILE * istream; |
746 |
{ |
730 |
{ |
747 |
struct mapelt *mapelt = (struct mapelt *) xmalloc (sizeof (struct mapelt)); |
731 |
struct mapelt *mapelt = (struct mapelt *) xmalloc (sizeof (struct mapelt)); |
748 |
mapelt->info = member; |
732 |
mapelt->info = member; |
Lines 755-762
Link Here
|
755 |
/* Return the last element of the specified map. */ |
739 |
/* Return the last element of the specified map. */ |
756 |
|
740 |
|
757 |
struct mapelt * |
741 |
struct mapelt * |
758 |
last_mapelt (map) |
742 |
last_mapelt (struct mapelt *map) |
759 |
struct mapelt *map; |
|
|
760 |
{ |
743 |
{ |
761 |
struct mapelt *tail = map; |
744 |
struct mapelt *tail = map; |
762 |
while (tail->next) tail = tail->next; |
745 |
while (tail->next) tail = tail->next; |
Lines 766-773
Link Here
|
766 |
/* Return the element of the specified map which precedes elt. */ |
749 |
/* Return the element of the specified map which precedes elt. */ |
767 |
|
750 |
|
768 |
struct mapelt * |
751 |
struct mapelt * |
769 |
prev_mapelt (map, elt) |
752 |
prev_mapelt (struct mapelt *map, struct mapelt *elt) |
770 |
struct mapelt *map, *elt; |
|
|
771 |
{ |
753 |
{ |
772 |
struct mapelt *tail = map; |
754 |
struct mapelt *tail = map; |
773 |
while (tail->next && tail->next != elt) |
755 |
while (tail->next && tail->next != elt) |
Lines 779-787
Link Here
|
779 |
/* Return the element of the specified map which has the specified name. */ |
761 |
/* Return the element of the specified map which has the specified name. */ |
780 |
|
762 |
|
781 |
struct mapelt * |
763 |
struct mapelt * |
782 |
find_mapelt_noerror (map, name) |
764 |
find_mapelt_noerror (struct mapelt *map, register char *name) |
783 |
struct mapelt *map; |
|
|
784 |
register char *name; |
785 |
{ |
765 |
{ |
786 |
register struct mapelt *tail; |
766 |
register struct mapelt *tail; |
787 |
unsigned int len; |
767 |
unsigned int len; |
Lines 816-824
Link Here
|
816 |
} |
796 |
} |
817 |
|
797 |
|
818 |
struct mapelt * |
798 |
struct mapelt * |
819 |
find_mapelt (map, name) |
799 |
find_mapelt (struct mapelt *map, char *name) |
820 |
struct mapelt *map; |
|
|
821 |
char *name; |
822 |
{ |
800 |
{ |
823 |
register struct mapelt *found = find_mapelt_noerror (map, name); |
801 |
register struct mapelt *found = find_mapelt_noerror (map, name); |
824 |
if (found == 0) |
802 |
if (found == 0) |
Lines 934-942
Link Here
|
934 |
*/ |
912 |
*/ |
935 |
|
913 |
|
936 |
void |
914 |
void |
937 |
write_archive (map, appendflag) |
915 |
write_archive (struct mapelt *map, int appendflag) |
938 |
struct mapelt *map; |
|
|
939 |
int appendflag; |
940 |
{ |
916 |
{ |
941 |
char *tempname = make_tempname (archive); |
917 |
char *tempname = make_tempname (archive); |
942 |
int indesc = lock_indesc; |
918 |
int indesc = lock_indesc; |
Lines 1059-1067
Link Here
|
1059 |
} |
1035 |
} |
1060 |
|
1036 |
|
1061 |
void |
1037 |
void |
1062 |
header_from_map (header, mapelt) |
1038 |
header_from_map (struct ar_hdr *header, struct mapelt *mapelt) |
1063 |
struct ar_hdr *header; |
|
|
1064 |
struct mapelt *mapelt; |
1065 |
{ |
1039 |
{ |
1066 |
unsigned int namelen; |
1040 |
unsigned int namelen; |
1067 |
char *p; |
1041 |
char *p; |
Lines 1116-1123
Link Here
|
1116 |
/* gets just the file part of name */ |
1090 |
/* gets just the file part of name */ |
1117 |
|
1091 |
|
1118 |
char * |
1092 |
char * |
1119 |
basename (path) |
1093 |
basename (char *path) |
1120 |
char *path; |
|
|
1121 |
{ |
1094 |
{ |
1122 |
char *save, *start; |
1095 |
char *save, *start; |
1123 |
for (start = save = path; *path; path++) |
1096 |
for (start = save = path; *path; path++) |
Lines 1132-1142
Link Here
|
1132 |
|
1105 |
|
1133 |
/* writes to file open on OUTDESC with name OUTNAME. */ |
1106 |
/* writes to file open on OUTDESC with name OUTNAME. */ |
1134 |
void |
1107 |
void |
1135 |
copy_out_member (mapelt, archive_indesc, outdesc, outname) |
1108 |
copy_out_member (struct mapelt *mapelt, int archive_indesc, int outdesc, char *outname) |
1136 |
struct mapelt *mapelt; |
|
|
1137 |
int archive_indesc; |
1138 |
int outdesc; |
1139 |
char *outname; |
1140 |
{ |
1109 |
{ |
1141 |
struct ar_hdr header; |
1110 |
struct ar_hdr header; |
1142 |
int indesc; |
1111 |
int indesc; |
Lines 1192-1200
Link Here
|
1192 |
It is open on OUTDESC and its name is OUTNAME. */ |
1161 |
It is open on OUTDESC and its name is OUTNAME. */ |
1193 |
|
1162 |
|
1194 |
void |
1163 |
void |
1195 |
touch_symdef_member (outdesc, outname) |
1164 |
touch_symdef_member (int outdesc, char *outname) |
1196 |
int outdesc; |
|
|
1197 |
char *outname; |
1198 |
{ |
1165 |
{ |
1199 |
struct stat statbuf; |
1166 |
struct stat statbuf; |
1200 |
int i; |
1167 |
int i; |
Lines 1215-1222
Link Here
|
1215 |
} |
1182 |
} |
1216 |
|
1183 |
|
1217 |
char * |
1184 |
char * |
1218 |
make_tempname (name) |
1185 |
make_tempname (char *name) |
1219 |
char *name; |
|
|
1220 |
{ |
1186 |
{ |
1221 |
#if defined(USG) || defined(SHORT_FILENAME) |
1187 |
#if defined(USG) || defined(SHORT_FILENAME) |
1222 |
/* sigh. 14 character filenames are *wonderful*, just *wonderful*. */ |
1188 |
/* sigh. 14 character filenames are *wonderful*, just *wonderful*. */ |
Lines 1264-1272
Link Here
|
1264 |
} |
1230 |
} |
1265 |
|
1231 |
|
1266 |
void |
1232 |
void |
1267 |
delete_from_map (name, map) |
1233 |
delete_from_map (char *name, struct mapelt *map) |
1268 |
char *name; |
|
|
1269 |
struct mapelt *map; |
1270 |
{ |
1234 |
{ |
1271 |
struct mapelt *this = find_mapelt (map, name); |
1235 |
struct mapelt *this = find_mapelt (map, name); |
1272 |
|
1236 |
|
Lines 1321-1329
Link Here
|
1321 |
} |
1285 |
} |
1322 |
|
1286 |
|
1323 |
int |
1287 |
int |
1324 |
move_in_map (name, map, after) |
1288 |
move_in_map (char *name, struct mapelt *map, struct mapelt *after) |
1325 |
char *name; |
|
|
1326 |
struct mapelt *map, *after; |
1327 |
{ |
1289 |
{ |
1328 |
struct mapelt *this = find_mapelt (map, name); |
1290 |
struct mapelt *this = find_mapelt (map, name); |
1329 |
struct mapelt *prev; |
1291 |
struct mapelt *prev; |
Lines 1430-1438
Link Here
|
1430 |
exist or (optionally) is older. */ |
1392 |
exist or (optionally) is older. */ |
1431 |
|
1393 |
|
1432 |
int |
1394 |
int |
1433 |
insert_in_map (name, map, after) |
1395 |
insert_in_map (char *name, struct mapelt *map, struct mapelt *after) |
1434 |
char *name; |
|
|
1435 |
struct mapelt *map, *after; |
1436 |
{ |
1396 |
{ |
1437 |
struct mapelt *old = find_mapelt_noerror (map, name); |
1397 |
struct mapelt *old = find_mapelt_noerror (map, name); |
1438 |
struct mapelt *this; |
1398 |
struct mapelt *this; |
Lines 1474-1484
Link Here
|
1474 |
*/ |
1434 |
*/ |
1475 |
|
1435 |
|
1476 |
void |
1436 |
void |
1477 |
extract_members (function) |
1437 |
extract_members ( |
1478 |
#ifdef __STDC__ |
1438 |
#ifdef __STDC__ |
1479 |
void (*function) (struct member_desc member, FILE *istream); |
1439 |
void (*function) (struct member_desc member, FILE *istream)) |
1480 |
#else |
1440 |
#else |
1481 |
void (*function) (); |
1441 |
void (*function) ()) |
1482 |
#endif |
1442 |
#endif |
1483 |
{ |
1443 |
{ |
1484 |
struct mapelt *map; |
1444 |
struct mapelt *map; |
Lines 1513-1523
Link Here
|
1513 |
are descriptor and name of file to write to. */ |
1473 |
are descriptor and name of file to write to. */ |
1514 |
|
1474 |
|
1515 |
void |
1475 |
void |
1516 |
write_symdef_member (mapelt, map, outdesc, outname) |
1476 |
write_symdef_member (struct mapelt *mapelt, struct mapelt *map, int outdesc, char *outname) |
1517 |
struct mapelt *mapelt; |
|
|
1518 |
struct mapelt *map; |
1519 |
int outdesc; |
1520 |
char *outname; |
1521 |
{ |
1477 |
{ |
1522 |
struct ar_hdr header; |
1478 |
struct ar_hdr header; |
1523 |
struct mapelt *mapptr; |
1479 |
struct mapelt *mapptr; |
Lines 1590-1598
Link Here
|
1590 |
} |
1546 |
} |
1591 |
|
1547 |
|
1592 |
void |
1548 |
void |
1593 |
read_old_symdefs (map, archive_indesc) |
1549 |
read_old_symdefs (struct mapelt *map, int archive_indesc) |
1594 |
struct mapelt *map; |
|
|
1595 |
int archive_indesc; |
1596 |
{ |
1550 |
{ |
1597 |
struct mapelt *mapelt; |
1551 |
struct mapelt *mapelt; |
1598 |
char *data; |
1552 |
char *data; |
Lines 1636-1649
Link Here
|
1636 |
Return 0 for failure or 1 for success. */ |
1590 |
Return 0 for failure or 1 for success. */ |
1637 |
|
1591 |
|
1638 |
int |
1592 |
int |
1639 |
read_header_info (mapelt, desc, offset, syms_offset, syms_size, strs_offset, strs_size) |
1593 |
read_header_info (struct mapelt *mapelt, int desc, long int offset, long int *syms_offset, |
1640 |
struct mapelt *mapelt; |
1594 |
unsigned int *syms_size, long int *strs_offset, unsigned int *strs_size) |
1641 |
int desc; |
|
|
1642 |
long int offset; |
1643 |
long int *syms_offset; |
1644 |
unsigned int *syms_size; |
1645 |
long int *strs_offset; |
1646 |
unsigned int *strs_size; |
1647 |
{ |
1595 |
{ |
1648 |
struct exec hdr; |
1596 |
struct exec hdr; |
1649 |
int len; |
1597 |
int len; |
Lines 1683-1691
Link Here
|
1683 |
by reading the file it is coming from. */ |
1631 |
by reading the file it is coming from. */ |
1684 |
|
1632 |
|
1685 |
void |
1633 |
void |
1686 |
make_new_symdefs (mapelt, archive_indesc) |
1634 |
make_new_symdefs (struct mapelt *mapelt, int archive_indesc) |
1687 |
struct mapelt *mapelt; |
|
|
1688 |
int archive_indesc; |
1689 |
{ |
1635 |
{ |
1690 |
int indesc; |
1636 |
int indesc; |
1691 |
char *name = mapelt->info.name; |
1637 |
char *name = mapelt->info.name; |
Lines 1798-1806
Link Here
|
1798 |
Return the number of symbols left. */ |
1744 |
Return the number of symbols left. */ |
1799 |
|
1745 |
|
1800 |
int |
1746 |
int |
1801 |
filter_symbols (syms, symcount) |
1747 |
filter_symbols (struct nlist *syms, unsigned int symcount) |
1802 |
struct nlist *syms; |
|
|
1803 |
unsigned int symcount; |
1804 |
{ |
1748 |
{ |
1805 |
struct nlist *from, *to; |
1749 |
struct nlist *from, *to; |
1806 |
struct nlist *end = syms + symcount; |
1750 |
struct nlist *end = syms + symcount; |
Lines 1817-1825
Link Here
|
1817 |
/* Update the __.SYMDEF data before writing a new archive. */ |
1761 |
/* Update the __.SYMDEF data before writing a new archive. */ |
1818 |
|
1762 |
|
1819 |
void |
1763 |
void |
1820 |
update_symdefs (map, archive_indesc) |
1764 |
update_symdefs (struct mapelt *map, int archive_indesc) |
1821 |
struct mapelt *map; |
|
|
1822 |
int archive_indesc; |
1823 |
{ |
1765 |
{ |
1824 |
struct mapelt *tail; |
1766 |
struct mapelt *tail; |
1825 |
int pos; |
1767 |
int pos; |
Lines 1987-1995
Link Here
|
1987 |
/* Print error message and usage message, and exit. */ |
1929 |
/* Print error message and usage message, and exit. */ |
1988 |
|
1930 |
|
1989 |
void |
1931 |
void |
1990 |
usage (s1, val) |
1932 |
usage (char *s1, int val) |
1991 |
char *s1; |
|
|
1992 |
int val; |
1993 |
{ |
1933 |
{ |
1994 |
char vbuf[16]; |
1934 |
char vbuf[16]; |
1995 |
sprintf(vbuf, "%d", val); |
1935 |
sprintf(vbuf, "%d", val); |
Lines 2003-2010
Link Here
|
2003 |
/* Print error message and exit. */ |
1943 |
/* Print error message and exit. */ |
2004 |
|
1944 |
|
2005 |
void |
1945 |
void |
2006 |
fatal (s1, s2) |
1946 |
fatal (char *s1, char *s2) |
2007 |
char *s1, *s2; |
|
|
2008 |
{ |
1947 |
{ |
2009 |
error (s1, s2); |
1948 |
error (s1, s2); |
2010 |
exit (1); |
1949 |
exit (1); |
Lines 2013-2020
Link Here
|
2013 |
/* Print error message. `s1' is printf control string, the rest are args. */ |
1952 |
/* Print error message. `s1' is printf control string, the rest are args. */ |
2014 |
|
1953 |
|
2015 |
void |
1954 |
void |
2016 |
error (s1, s2) |
1955 |
error (char *s1, char *s2) |
2017 |
char *s1, *s2; |
|
|
2018 |
{ |
1956 |
{ |
2019 |
fprintf (stderr, "%s: ", program_name); |
1957 |
fprintf (stderr, "%s: ", program_name); |
2020 |
fprintf (stderr, s1, s2); |
1958 |
fprintf (stderr, s1, s2); |
Lines 2022-2029
Link Here
|
2022 |
} |
1960 |
} |
2023 |
|
1961 |
|
2024 |
void |
1962 |
void |
2025 |
error3 (s1, s2, s3) |
1963 |
error3 (char *s1, char *s2, char *s3) |
2026 |
char *s1, *s2, *s3; |
|
|
2027 |
{ |
1964 |
{ |
2028 |
fprintf (stderr, "%s: ", program_name); |
1965 |
fprintf (stderr, "%s: ", program_name); |
2029 |
fprintf (stderr, s1, s2, s3); |
1966 |
fprintf (stderr, s1, s2, s3); |
Lines 2031-2039
Link Here
|
2031 |
} |
1968 |
} |
2032 |
|
1969 |
|
2033 |
void |
1970 |
void |
2034 |
error_with_file (string, mapelt) |
1971 |
error_with_file (char *string, struct mapelt *mapelt) |
2035 |
char *string; |
|
|
2036 |
struct mapelt *mapelt; |
2037 |
{ |
1972 |
{ |
2038 |
fprintf (stderr, "%s: ", program_name); |
1973 |
fprintf (stderr, "%s: ", program_name); |
2039 |
fprintf (stderr, "%s", string); |
1974 |
fprintf (stderr, "%s", string); |
Lines 2045-2059
Link Here
|
2045 |
} |
1980 |
} |
2046 |
|
1981 |
|
2047 |
void |
1982 |
void |
2048 |
perror_with_name (name) |
1983 |
perror_with_name (char *name) |
2049 |
char *name; |
|
|
2050 |
{ |
1984 |
{ |
2051 |
error (concat ("", strerror(errno), " for %s"), name); |
1985 |
error (concat ("", strerror(errno), " for %s"), name); |
2052 |
} |
1986 |
} |
2053 |
|
1987 |
|
2054 |
void |
1988 |
void |
2055 |
pfatal_with_name (name) |
1989 |
pfatal_with_name (char *name) |
2056 |
char *name; |
|
|
2057 |
{ |
1990 |
{ |
2058 |
fatal (concat ("", strerror(errno), " for %s"), name); |
1991 |
fatal (concat ("", strerror(errno), " for %s"), name); |
2059 |
} |
1992 |
} |
Lines 2062-2069
Link Here
|
2062 |
concatenate those of S1, S2, and S3. */ |
1995 |
concatenate those of S1, S2, and S3. */ |
2063 |
|
1996 |
|
2064 |
char * |
1997 |
char * |
2065 |
concat (s1, s2, s3) |
1998 |
concat (const char *s1, const char *s2, const char *s3) |
2066 |
const char *s1, *s2, *s3; |
|
|
2067 |
{ |
1999 |
{ |
2068 |
int len1 = strlen (s1), len2 = strlen (s2), len3 = strlen (s3); |
2000 |
int len1 = strlen (s1), len2 = strlen (s2), len3 = strlen (s3); |
2069 |
char *result = (char *) xmalloc (len1 + len2 + len3 + 1); |
2001 |
char *result = (char *) xmalloc (len1 + len2 + len3 + 1); |
Lines 2079-2086
Link Here
|
2079 |
/* Like malloc but get fatal error if memory is exhausted. */ |
2011 |
/* Like malloc but get fatal error if memory is exhausted. */ |
2080 |
|
2012 |
|
2081 |
char * |
2013 |
char * |
2082 |
xmalloc (size) |
2014 |
xmalloc (unsigned int size) |
2083 |
unsigned int size; |
|
|
2084 |
{ |
2015 |
{ |
2085 |
#ifdef MALLOC_0_RETURNS_NULL |
2016 |
#ifdef MALLOC_0_RETURNS_NULL |
2086 |
char *result = malloc (size ? size : 1); |
2017 |
char *result = malloc (size ? size : 1); |
Lines 2093-2101
Link Here
|
2093 |
} |
2024 |
} |
2094 |
|
2025 |
|
2095 |
char * |
2026 |
char * |
2096 |
xrealloc (ptr, size) |
2027 |
xrealloc (char *ptr, unsigned int size) |
2097 |
char *ptr; |
|
|
2098 |
unsigned int size; |
2099 |
{ |
2028 |
{ |
2100 |
char *result = realloc (ptr, size); |
2029 |
char *result = realloc (ptr, size); |
2101 |
if (result == 0) |
2030 |
if (result == 0) |
Lines 2106-2113
Link Here
|
2106 |
|
2035 |
|
2107 |
#ifndef HAVE_RENAME |
2036 |
#ifndef HAVE_RENAME |
2108 |
int |
2037 |
int |
2109 |
rename (from, to) |
2038 |
rename (char *from, char *to) |
2110 |
char *from, *to; |
|
|
2111 |
{ |
2039 |
{ |
2112 |
(void)unlink (to); |
2040 |
(void)unlink (to); |
2113 |
if (link (from, to) < 0 |
2041 |
if (link (from, to) < 0 |