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