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