BSD 4_3_Reno release
[unix-history] / usr / src / sys / hpstand / copy.c
/*
* Copyright (c) 1982, 1986, 1990 The Regents of the University of California.
* All rights reserved.
*
* Redistribution is only permitted until one year after the first shipment
* of 4.4BSD by the Regents. Otherwise, redistribution and use in source and
* binary forms are permitted provided that: (1) source distributions retain
* this entire copyright notice and comment, and (2) distributions including
* binaries display the following acknowledgement: This product includes
* software developed by the University of California, Berkeley and its
* contributors'' in the documentation or other materials provided with the
* distribution and in all advertising materials mentioning features or use
* of this software. Neither the name of the University nor the names of
* its contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* @(#)copy.c 7.1 (Berkeley) 5/8/90
*/
/*
* 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);
}