break out main copy loop
authorKeith Bostic <bostic@ucbvax.Berkeley.EDU>
Fri, 4 Mar 1988 13:03:40 +0000 (05:03 -0800)
committerKeith Bostic <bostic@ucbvax.Berkeley.EDU>
Fri, 4 Mar 1988 13:03:40 +0000 (05:03 -0800)
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
usr/src/sys/stand.att/docopy.c [new file with mode: 0644]

index 83ae9ed..0883fd3 100644 (file)
@@ -3,7 +3,7 @@
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
  * 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 (file)
index 0000000..794a1ca
--- /dev/null
@@ -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);
+}