summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandreas_kupries <akupries@shaw.ca>2006-11-07 17:29:03 (GMT)
committerandreas_kupries <akupries@shaw.ca>2006-11-07 17:29:03 (GMT)
commitecfa2d1cbd6cf755e07eaf5e5e0279fa3aeeb54d (patch)
tree34dfae5092488e7438c8bc9360e2c66a2d33a80d
parent3e6a8effaded504ae2e5c836620c08eb5b4f0e68 (diff)
downloadtcl-ecfa2d1cbd6cf755e07eaf5e5e0279fa3aeeb54d.zip
tcl-ecfa2d1cbd6cf755e07eaf5e5e0279fa3aeeb54d.tar.gz
tcl-ecfa2d1cbd6cf755e07eaf5e5e0279fa3aeeb54d.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.
-rw-r--r--ChangeLog6
-rw-r--r--unix/tclUnixFCmd.c12
2 files changed, 17 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index c2203c2..24f3409 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2006-11-07 Andreas Kupries <andreask@activestate.com>
+
+ * 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.
+
2006-11-03 Miguel Sofer <msofer@users.sf.net>
* generic/tclBasic.c (TEOVI): fix por possible leak of a Command
diff --git a/unix/tclUnixFCmd.c b/unix/tclUnixFCmd.c
index 17432cc..eb48103 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.28.2.13 2006/09/07 18:49:28 vasiljevic Exp $
+ * RCS: @(#) $Id: tclUnixFCmd.c,v 1.28.2.14 2006/11/07 17:29:04 andreas_kupries Exp $
*
* Portions of this code were derived from NetBSD source code which has
* the following copyright notice:
@@ -506,6 +506,16 @@ CopyFile(src, dst, statBufPtr)
#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 = read(srcFd, buffer, blockSize);