From 1196744ab82d167bf4b72f11565ccc8c64ae655d Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Wed, 11 Jul 2012 16:19:25 +0000 Subject: When copying a file sparsely, truncate the resulting file based on the current seek offset rather than what fstat() reported the original file's length was. This fixes things like "cp /dev/ksyms /tmp" so that we don't truncate the file to 0 bytes after copying all of the data. ok tedu, millert --- bin/cp/utils.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/cp/utils.c b/bin/cp/utils.c index c45a6a4af32..dbe8cd14ee0 100644 --- a/bin/cp/utils.c +++ b/bin/cp/utils.c @@ -1,4 +1,4 @@ -/* $OpenBSD: utils.c,v 1.32 2012/04/11 09:45:47 espie Exp $ */ +/* $OpenBSD: utils.c,v 1.33 2012/07/11 16:19:24 matthew Exp $ */ /* $NetBSD: utils.c,v 1.6 1997/02/26 14:40:51 cgd Exp $ */ /*- @@ -158,7 +158,7 @@ copy_file(FTSENT *entp, int dne) } } if (skipholes && rcount >= 0) - rcount = ftruncate(to_fd, fs->st_size); + rcount = ftruncate(to_fd, lseek(to_fd, 0, SEEK_CUR)); if (rcount < 0) { warn("%s", entp->fts_path); rval = 1; -- cgit v1.2.3