xref: /original-bsd/sys/stand.att/docopy.c (revision b424313c)
1 /*
2  * Copyright (c) 1988 Regents of the University of California.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms are permitted
6  * provided that this notice is preserved and that due credit is given
7  * to the University of California at Berkeley. The name of the University
8  * may not be used to endorse or promote products derived from this
9  * software without specific prior written permission. This software
10  * is provided ``as is'' without express or implied warranty.
11  *
12  *	@(#)docopy.c	7.1 (Berkeley) 03/03/88
13  */
14 #define	SIZE	10240
15 
16 docopy(from, to, nrecs)
17 	register int from, to, nrecs;
18 {
19 	register int record, rcc, wcc;
20 	char buf[SIZE];
21 
22 	for (record = 0;;) {
23 		if (!(rcc = read(from, buffer, SIZE)))
24 			break;
25 		if (rcc < 0) {
26 			printf("Record %d: read error, errno=%d\n",
27 			    record, errno);
28 			break;
29 		}
30 		if (rcc < SIZE)
31 			printf("Record %d: read short; expected %d, got %d\n",
32 			    record, SIZE, rcc);
33 #ifdef vax
34 		/* For bug in ht driver. */
35 		if (rcc > SIZE)
36 			rcc = SIZE;
37 #endif
38 		if ((wcc = write(to, buffer, rcc)) < 0) {
39 			printf("Record %d: write error: errno=%d\n",
40 			    record, errno);
41 			break;
42 		}
43 		if (wcc < rcc) {
44 			printf("Record %d: write short; expected %d, got %d\n",
45 			    record, rcc, wcc);
46 			break;
47 		}
48 		if (nrecs > 0 && ++record == nrecs)
49 			break;
50 	}
51 	printf("copy completed: %d records copied\n", record);
52 }
53