copy.c revision 1.8 1 /* $NetBSD: copy.c,v 1.8 1998/09/13 15:19:13 christos Exp $ */
2
3 /*-
4 * Copyright (c) 1993
5 * The Regents of the University of California. All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * 3. All advertising materials mentioning features or use of this software
16 * must display the following acknowledgement:
17 * This product includes software developed by the University of
18 * California, Berkeley and its contributors.
19 * 4. Neither the name of the University nor the names of its contributors
20 * may be used to endorse or promote products derived from this software
21 * without specific prior written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 * SUCH DAMAGE.
34 */
35
36 #include <sys/cdefs.h>
37 #ifndef lint
38 __COPYRIGHT("@(#) Copyright (c) 1993\n\
39 The Regents of the University of California. All rights reserved.\n");
40 #endif /* not lint */
41
42 #ifndef lint
43 #if 0
44 static char sccsid[] = "@(#)copy.c 8.1 (Berkeley) 6/11/93";
45 #else
46 __RCSID("$NetBSD: copy.c,v 1.8 1998/09/13 15:19:13 christos Exp $");
47 #endif
48 #endif /* not lint */
49
50 #define BSIZE 10240
51
52 /*
53 * Copy from from to to. Intended for use in system installation.
54 */
55 main()
56 {
57 extern int errno;
58 register int from, to, record, rcc, wcc, bsize = BSIZE;
59 char buf[BSIZE];
60
61 from = getfile("From", 0);
62 to = getfile("To", 1);
63 for (record = 0;; ++record) {
64 if (!(rcc = read(from, buf, bsize)))
65 break;
66 if (rcc < 0) {
67 printf("Record %d: read error, errno=%d\n",
68 record, errno);
69 break;
70 }
71 if (rcc != bsize) {
72 if (record == 0) {
73 bsize = rcc;
74 printf("Block size set from input; %d bytes\n",
75 bsize);
76 } else
77 printf("Record %d: read short; expected %d, got %d\n",
78 record, bsize, rcc);
79 }
80 #ifdef vax
81 /* For bug in ht driver. */
82 if (rcc > bsize)
83 rcc = bsize;
84 #endif
85 if ((wcc = write(to, buf, rcc)) < 0) {
86 printf("Record %d: write error: errno=%d\n",
87 record, errno);
88 break;
89 }
90 if (wcc < rcc) {
91 printf("Record %d: write short; expected %d, got %d\n",
92 record, rcc, wcc);
93 break;
94 }
95 }
96 printf("copy completed: %d records copied\n", record);
97 }
98