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) 6/5/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 buffer[10240]; 18 register int record; 19 extern int errno; 20 21 from = getdev("From", 0); 22 to = getdev("To", 1); 23 for (record = 0; ; record++) { 24 register int rcc, wcc; 25 26 rcc = read(from, buffer, sizeof (buffer)); 27 if (rcc == 0) 28 break; 29 if (rcc < 0) { 30 printf("Record %d: read error, errno=%d\n", 31 record, errno); 32 break; 33 } 34 if (rcc < sizeof (buffer)) 35 printf("Record %d: read short; expected %d, got %d\n", 36 record, sizeof (buffer), rcc); 37 /* 38 * For bug in ht driver. 39 */ 40 if (rcc > sizeof (buffer)) 41 rcc = sizeof (buffer); 42 wcc = write(to, buffer, rcc); 43 if (wcc < 0) { 44 printf("Record %d: write error: errno=%d\n", 45 record, errno); 46 break; 47 } 48 if (wcc < rcc) { 49 printf("Record %d: write short; expected %d, got %d\n", 50 record, rcc, wcc); 51 break; 52 } 53 } 54 printf("Copy completed: %d records copied\n", record); 55 /* can't call exit here */ 56 } 57 58 static 59 getdev(prompt, mode) 60 char *prompt; 61 int mode; 62 { 63 int i; 64 char buf[100]; 65 66 do { 67 printf("%s: ", prompt); 68 gets(buf); 69 i = open(buf, mode); 70 } while (i <= 0); 71 return (i); 72 } 73