xref: /csrg-svn/sys/stand.att/copy.c (revision 33431)
1 /*
2  * Copyright (c) 1982, 1986 Regents of the University of California.
3  * All rights reserved.  The Berkeley software License Agreement
4  * specifies the terms and conditions for redistribution.
5  *
6  *	@(#)copy.c	7.1 (Berkeley) 6/5/86
7  */
8 
9 /*
10  * Copy from to in 10K units.
11  * Intended for use in system
12  * installation.
13  */
14 main()
15 {
16 	int from, to;
17 	char buffer[10240];
18 	register int record;
19 	extern int errno;
20 
21 	from = getdev("From", 0);
22 	to = getdev("To", 1);
23 	for (record = 0; ; record++) {
24 		register int rcc, wcc;
25 
26 		rcc = read(from, buffer, sizeof (buffer));
27 		if (rcc == 0)
28 			break;
29 		if (rcc < 0) {
30 			printf("Record %d: read error, errno=%d\n",
31 				record, errno);
32 			break;
33 		}
34 		if (rcc < sizeof (buffer))
35 			printf("Record %d: read short; expected %d, got %d\n",
36 				record, sizeof (buffer), rcc);
37 		/*
38 		 * For bug in ht driver.
39 		 */
40 		if (rcc > sizeof (buffer))
41 			rcc = sizeof (buffer);
42 		wcc = write(to, buffer, rcc);
43 		if (wcc < 0) {
44 			printf("Record %d: write error: errno=%d\n",
45 				record, errno);
46 			break;
47 		}
48 		if (wcc < rcc) {
49 			printf("Record %d: write short; expected %d, got %d\n",
50 				record, rcc, wcc);
51 			break;
52 		}
53 	}
54 	printf("Copy completed: %d records copied\n", record);
55 	/* can't call exit here */
56 }
57 
58 static
59 getdev(prompt, mode)
60 	char *prompt;
61 	int mode;
62 {
63 	int i;
64 	char buf[100];
65 
66 	do {
67 		printf("%s: ", prompt);
68 		gets(buf);
69 		i = open(buf, mode);
70 	} while (i <= 0);
71 	return (i);
72 }
73