xref: /original-bsd/sys/stand.att/copy.c (revision b64b0d54)
1 /*	copy.c	4.5	83/02/24	*/
2 
3 /*
4  * Copy from to in 10K units.
5  * Intended for use in system
6  * installation.
7  */
8 main()
9 {
10 	int from, to;
11 	char fbuf[50], tbuf[50];
12 	char buffer[10240];
13 	register int record;
14 	extern int errno;
15 
16 	from = getdev("From", fbuf, 0);
17 	to = getdev("To", tbuf, 1);
18 	for (record = 0; ; record++) {
19 		int rcc, wcc;
20 
21 		rcc = read(from, buffer, sizeof (buffer));
22 		if (rcc == 0)
23 			break;
24 		if (rcc < 0) {
25 			printf("Record %d: read error, errno=%d\n",
26 				record, errno);
27 			break;
28 		}
29 		if (rcc < sizeof (buffer))
30 			printf("Record %d: read short; expected %d, got %d\n",
31 				record, sizeof (buffer), rcc);
32 		/*
33 		 * For bug in ht driver.
34 		 */
35 		if (rcc > sizeof (buffer))
36 			rcc = sizeof (buffer);
37 		wcc = write(to, buffer, rcc);
38 		if (wcc < 0) {
39 			printf("Record %d: write error: errno=%d\n",
40 				record, errno);
41 			break;
42 		}
43 		if (wcc < rcc) {
44 			printf("Record %d: write short; expected %d, got %d\n",
45 				record, rcc, wcc);
46 			break;
47 		}
48 	}
49 	printf("Copy completed: %d records copied\n", record);
50 	/* can't call exit here */
51 }
52 
53 getdev(prompt, buf, mode)
54 	char *prompt, *buf;
55 	int mode;
56 {
57 	register int i;
58 
59 	do {
60 		printf("%s: ", prompt);
61 		gets(buf);
62 		i = open(buf, mode);
63 	} while (i <= 0);
64 	return (i);
65 }
66