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