diff options
author | andreas_kupries <akupries@shaw.ca> | 2006-11-07 17:29:03 (GMT) |
---|---|---|
committer | andreas_kupries <akupries@shaw.ca> | 2006-11-07 17:29:03 (GMT) |
commit | ecfa2d1cbd6cf755e07eaf5e5e0279fa3aeeb54d (patch) | |
tree | 34dfae5092488e7438c8bc9360e2c66a2d33a80d | |
parent | 3e6a8effaded504ae2e5c836620c08eb5b4f0e68 (diff) | |
download | tcl-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-- | ChangeLog | 6 | ||||
-rw-r--r-- | unix/tclUnixFCmd.c | 12 |
2 files changed, 17 insertions, 1 deletions
@@ -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); |