From 777c02a39373e2e5e683f9e7503eacade47e66a2 Mon Sep 17 00:00:00 2001 From: Keith Bostic Date: Fri, 4 Mar 1988 05:03:40 -0800 Subject: [PATCH] break out main copy loop SCCS-vsn: sys/stand.att/copy.c 7.5 SCCS-vsn: sys/stand.att/copy.c 7.5 SCCS-vsn: sys/stand.att/docopy.c 7.1 --- usr/src/sys/stand.att/copy.c | 2 +- usr/src/sys/stand.att/docopy.c | 52 ++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 usr/src/sys/stand.att/docopy.c diff --git a/usr/src/sys/stand.att/copy.c b/usr/src/sys/stand.att/copy.c index 83ae9ede0f..0883fd3c31 100644 --- a/usr/src/sys/stand.att/copy.c +++ b/usr/src/sys/stand.att/copy.c @@ -3,7 +3,7 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. * - * @(#)copy.c 7.4 (Berkeley) %G% + * @(#)copy.c 7.5 (Berkeley) %G% */ /* diff --git a/usr/src/sys/stand.att/docopy.c b/usr/src/sys/stand.att/docopy.c new file mode 100644 index 0000000000..794a1ca8b9 --- /dev/null +++ b/usr/src/sys/stand.att/docopy.c @@ -0,0 +1,52 @@ +/* + * Copyright (c) 1988 Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted + * provided that this notice is preserved and that due credit is given + * to the University of California at Berkeley. The name of the University + * may not be used to endorse or promote products derived from this + * software without specific prior written permission. This software + * is provided ``as is'' without express or implied warranty. + * + * @(#)docopy.c 7.1 (Berkeley) %G% + */ +#define SIZE 10240 + +docopy(from, to, nrecs) + register int from, to, nrecs; +{ + register int record, rcc, wcc; + char buf[SIZE]; + + for (record = 0;;) { + if (!(rcc = read(from, buffer, SIZE))) + break; + if (rcc < 0) { + printf("Record %d: read error, errno=%d\n", + record, errno); + break; + } + if (rcc < SIZE) + printf("Record %d: read short; expected %d, got %d\n", + record, SIZE, rcc); +#ifdef vax + /* For bug in ht driver. */ + if (rcc > SIZE) + rcc = SIZE; +#endif + if ((wcc = write(to, buffer, rcc)) < 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; + } + if (nrecs > 0 && ++record == nrecs) + break; + } + printf("copy completed: %d records copied\n", record); +} -- 2.20.1