From 50977465d092acf9e468c05d9c2736f949d03c7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Tue, 9 Jun 2009 20:25:20 +0000 Subject: [PATCH] * This should recreate 0 byte attributes, and therefore fix bug #4015. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31000 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/bin/coreutils/src/copy.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/bin/coreutils/src/copy.c b/src/bin/coreutils/src/copy.c index cb8098bcbb..0182949a46 100644 --- a/src/bin/coreutils/src/copy.c +++ b/src/bin/coreutils/src/copy.c @@ -153,15 +153,17 @@ copy_attributes(int fromFd, int toFd) if (fs_stat_attr(fromFd, dirent->d_name, &info) != 0) continue; - while (info.size > 0) { + while (info.size >= 0) { ssize_t bytesRead, bytesWritten; - - bytesRead = fs_read_attr(fromFd, dirent->d_name, info.type, pos, buffer, sizeof(buffer)); - if (bytesRead <= 0) + + bytesRead = fs_read_attr(fromFd, dirent->d_name, info.type, pos, + buffer, sizeof(buffer)); + if (bytesRead < 0) break; - - bytesWritten = fs_write_attr(toFd, dirent->d_name, info.type, pos, buffer, bytesRead); - if (bytesWritten != bytesRead) + + bytesWritten = fs_write_attr(toFd, dirent->d_name, info.type, pos, + buffer, bytesRead); + if (bytesWritten != bytesRead || bytesRead == 0) break; pos += bytesWritten; @@ -189,7 +191,7 @@ copy_attributes_by_name(const char *from, const char *to, int resolveLinks) } result = copy_attributes(fromFd, toFd); - + close(fromFd); close(toFd);