1 /*- 2 * Copyright (c) 1982, 1986, 1988, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * %sccs.include.redist.c% 6 * 7 * @(#)copy.c 8.1 (Berkeley) 06/11/93 8 */ 9 10 #define BSIZE 10240 11 12 /* 13 * Copy from from to to. Intended for use in system installation. 14 */ 15 main() 16 { 17 extern int errno; 18 register int from, to, record, rcc, wcc, bsize = BSIZE; 19 char buf[BSIZE]; 20 21 from = getfile("From", 0); 22 to = getfile("To", 1); 23 for (record = 0;; ++record) { 24 if (!(rcc = read(from, buf, bsize))) 25 break; 26 if (rcc < 0) { 27 printf("Record %d: read error, errno=%d\n", 28 record, errno); 29 break; 30 } 31 if (rcc != bsize) { 32 if (record == 0) { 33 bsize = rcc; 34 printf("Block size set from input; %d bytes\n", 35 bsize); 36 } else 37 printf("Record %d: read short; expected %d, got %d\n", 38 record, bsize, rcc); 39 } 40 #ifdef vax 41 /* For bug in ht driver. */ 42 if (rcc > bsize) 43 rcc = bsize; 44 #endif 45 if ((wcc = write(to, buf, rcc)) < 0) { 46 printf("Record %d: write error: errno=%d\n", 47 record, errno); 48 break; 49 } 50 if (wcc < rcc) { 51 printf("Record %d: write short; expected %d, got %d\n", 52 record, rcc, wcc); 53 break; 54 } 55 } 56 printf("copy completed: %d records copied\n", record); 57 } 58