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