BSD 4_3 release
[unix-history] / usr / src / sys / stand / copy.c
/*
* Copyright (c) 1982, 1986 Regents of the University of California.
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*
* @(#)copy.c 7.1 (Berkeley) 6/5/86
*/
/*
* Copy from to in 10K units.
* Intended for use in system
* installation.
*/
main()
{
int from, to;
char fbuf[50], tbuf[50];
char buffer[10240];
register int record;
extern int errno;
from = getdev("From", fbuf, 0);
to = getdev("To", tbuf, 1);
for (record = 0; ; record++) {
int rcc, wcc;
rcc = read(from, buffer, sizeof (buffer));
if (rcc == 0)
break;
if (rcc < 0) {
printf("Record %d: read error, errno=%d\n",
record, errno);
break;
}
if (rcc < sizeof (buffer))
printf("Record %d: read short; expected %d, got %d\n",
record, sizeof (buffer), rcc);
/*
* For bug in ht driver.
*/
if (rcc > sizeof (buffer))
rcc = sizeof (buffer);
wcc = write(to, buffer, rcc);
if (wcc < 0) {
printf("Record %d: write error: errno=%d\n",
record, errno);
break;
}
if (wcc < rcc) {
printf("Record %d: write short; expected %d, got %d\n",
record, rcc, wcc);
break;
}
}
printf("Copy completed: %d records copied\n", record);
/* can't call exit here */
}
getdev(prompt, buf, mode)
char *prompt, *buf;
int mode;
{
register int i;
do {
printf("%s: ", prompt);
gets(buf);
i = open(buf, mode);
} while (i <= 0);
return (i);
}