-}
-
-/*
- * strip --
- * copy file, strip(1)'ing it at the same time
- */
-static
-strip(from_fd, from_name, to_fd, to_name)
- register int from_fd, to_fd;
- char *from_name, *to_name;
-{
- typedef struct exec EXEC;
- register long size;
- register int n;
- EXEC head;
- char buf[MAXBSIZE];
- off_t lseek();
-
- if (read(from_fd, (char *)&head, sizeof(head)) < 0 || N_BADMAG(head)) {
- fprintf(stderr, "install: %s not in a.out format.\n", from_name);
- bad();
- }
- if (head.a_syms || head.a_trsize || head.a_drsize) {
- size = (long)head.a_text + head.a_data;
- head.a_syms = head.a_trsize = head.a_drsize = 0;
- if (head.a_magic == ZMAGIC)
- size += getpagesize() - sizeof(EXEC);
- if (write(to_fd, (char *)&head, sizeof(EXEC)) != sizeof(EXEC)) {
- fprintf(stderr, "install: write: %s: %s\n", to_name, sys_errlist[errno]);
- bad();
- }
- for (; size; size -= n)
- if ((n = read(from_fd, buf, (int)MIN(size, sizeof(buf)))) <= 0)
- break;
- else if (write(to_fd, buf, n) != n) {
- fprintf(stderr, "install: write: %s: %s\n", to_name, sys_errlist[errno]);
- bad();
- }
- if (size) {
- fprintf(stderr, "install: read: %s: premature EOF.\n", from_name);
- bad();
- }
- if (n == -1) {
- fprintf(stderr, "install: read: %s: %s\n", from_name, sys_errlist[errno]);
- bad();
- }
- }
- else {
- (void)lseek(from_fd, 0L, L_SET);
- copy(from_fd, from_name, to_fd, to_name);