xref: /original-bsd/sys/stand.att/copy.c (revision 3705696b)
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