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