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