diff options
Diffstat (limited to 'usr.sbin/sup/lib/filecopy.c')
| -rw-r--r-- | usr.sbin/sup/lib/filecopy.c | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/usr.sbin/sup/lib/filecopy.c b/usr.sbin/sup/lib/filecopy.c new file mode 100644 index 000000000000..553becb34cc9 --- /dev/null +++ b/usr.sbin/sup/lib/filecopy.c @@ -0,0 +1,65 @@ +/* + * Copyright (c) 1991 Carnegie Mellon University + * All Rights Reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR + * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie the rights + * to redistribute these changes. + */ +/* filecopy -- copy a file from here to there + * + * Usage: i = filecopy (here,there); + * int i, here, there; + * + * Filecopy performs a fast copy of the file "here" to the + * file "there". Here and there are both file descriptors of + * open files; here is open for input, and there for output. + * Filecopy returns 0 if all is OK; -1 on error. + * + * I have performed some tests for possible improvements to filecopy. + * Using a buffer size of 10240 provides about a 1.5 times speedup + * over 512 for a file of about 200,000 bytes. Of course, other + * buffer sized should also work; this is a rather arbitrary choice. + * I have also tried inserting special startup code to attempt + * to align either the input or the output file to lie on a + * physical (512-byte) block boundary prior to the big loop, + * but this presents only a small (about 5% speedup, so I've + * canned that code. The simple thing seems to be good enough. + * + * HISTORY + * 20-Nov-79 Steven Shafer (sas) at Carnegie-Mellon University + * Rewritten for VAX; same as "filcopy" on PDP-11. Bigger buffer + * size (20 physical blocks) seems to be a big win; aligning things + * on block boundaries seems to be a negligible improvement at + * considerable cost in complexity. + * + */ + +#define BUFFERSIZE 10240 + +int filecopy (here,there) +int here,there; +{ + register int kount; + char buffer[BUFFERSIZE]; + kount = 0; + while (kount == 0 && (kount=read(here,buffer,BUFFERSIZE)) > 0) + kount -= write (there,buffer,kount); + return (kount ? -1 : 0); +} |
