summaryrefslogtreecommitdiffstats
path: root/unix/tclUnixFCmd.c
diff options
context:
space:
mode:
authorandreas_kupries <akupries@shaw.ca>2006-11-07 17:29:48 (GMT)
committerandreas_kupries <akupries@shaw.ca>2006-11-07 17:29:48 (GMT)
commita62a213bf0ec0c03cf8ba72b4d91fedced21f9a2 (patch)
tree9cb11083f33237d3a4c900bf26fd0f627988a284 /unix/tclUnixFCmd.c
parent73f732ad32276e43c736124f1a53d1cea5b54668 (diff)
downloadtcl-a62a213bf0ec0c03cf8ba72b4d91fedced21f9a2.zip
tcl-a62a213bf0ec0c03cf8ba72b4d91fedced21f9a2.tar.gz
tcl-a62a213bf0ec0c03cf8ba72b4d91fedced21f9a2.tar.bz2
* unix/tclUnixFCmd.c (CopyFile): [SF Tcl Bug 1586470]. Added code
to fall back to a hardwired default block size should the filesystem report a bogus value.
Diffstat (limited to 'unix/tclUnixFCmd.c')
-rw-r--r--unix/tclUnixFCmd.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/unix/tclUnixFCmd.c b/unix/tclUnixFCmd.c
index caadf68..8bf268d 100644
--- a/unix/tclUnixFCmd.c
+++ b/unix/tclUnixFCmd.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tclUnixFCmd.c,v 1.58 2006/11/02 15:58:09 dgp Exp $
+ * RCS: @(#) $Id: tclUnixFCmd.c,v 1.59 2006/11/07 17:29:48 andreas_kupries Exp $
*
* Portions of this code were derived from NetBSD source code which has the
* following copyright notice:
@@ -541,6 +541,16 @@ TclUnixCopyFile(
#endif
#endif
+ /* [SF Tcl Bug 1586470] Even if we HAVE_ST_BLKSIZE, there are
+ * filesystems which report a bogus value for the blocksize. An
+ * example is the Andrew Filesystem (afs), reporting a blocksize
+ * of 0. When detecting such a situation we now simply fall back
+ * to a hardwired default size.
+ */
+
+ if (blockSize <= 0) {
+ blockSize = 4096;
+ }
buffer = ckalloc(blockSize);
while (1) {
nread = (size_t) read(srcFd, buffer, blockSize);