1 /* copy.c 4.5 83/02/24 */ 2 3 /* 4 * Copy from to in 10K units. 5 * Intended for use in system 6 * installation. 7 */ 8 main() 9 { 10 int from, to; 11 char fbuf[50], tbuf[50]; 12 char buffer[10240]; 13 register int record; 14 extern int errno; 15 16 from = getdev("From", fbuf, 0); 17 to = getdev("To", tbuf, 1); 18 for (record = 0; ; record++) { 19 int rcc, wcc; 20 21 rcc = read(from, buffer, sizeof (buffer)); 22 if (rcc == 0) 23 break; 24 if (rcc < 0) { 25 printf("Record %d: read error, errno=%d\n", 26 record, errno); 27 break; 28 } 29 if (rcc < sizeof (buffer)) 30 printf("Record %d: read short; expected %d, got %d\n", 31 record, sizeof (buffer), rcc); 32 /* 33 * For bug in ht driver. 34 */ 35 if (rcc > sizeof (buffer)) 36 rcc = sizeof (buffer); 37 wcc = write(to, buffer, rcc); 38 if (wcc < 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 } 49 printf("Copy completed: %d records copied\n", record); 50 /* can't call exit here */ 51 } 52 53 getdev(prompt, buf, mode) 54 char *prompt, *buf; 55 int mode; 56 { 57 register int i; 58 59 do { 60 printf("%s: ", prompt); 61 gets(buf); 62 i = open(buf, mode); 63 } while (i <= 0); 64 return (i); 65 } 66