[haiku-commits] Change in haiku[master]: kernel/fs: fix previous commit logic

  • From: Gerrit <review@xxxxxxxxxxxxxxxxxxx>
  • To: waddlesplash <waddlesplash@xxxxxxxxx>, haiku-commits@xxxxxxxxxxxxx
  • Date: Fri, 6 Nov 2020 19:11:40 +0000

From Jérôme Duval <jerome.duval@xxxxxxxxx>:

Jérôme Duval has uploaded this change for review. ( 
https://review.haiku-os.org/c/haiku/+/3383 ;)


Change subject: kernel/fs: fix previous commit logic
......................................................................

kernel/fs: fix previous commit logic

fix #16598
---
M src/system/kernel/fs/fd.cpp
1 file changed, 11 insertions(+), 12 deletions(-)



  git pull ssh://git.haiku-os.org:22/haiku refs/changes/83/3383/1

diff --git a/src/system/kernel/fs/fd.cpp b/src/system/kernel/fs/fd.cpp
index ac94ff7..a15b3b6 100644
--- a/src/system/kernel/fs/fd.cpp
+++ b/src/system/kernel/fs/fd.cpp
@@ -748,7 +748,7 @@
        }

        bool movePosition = false;
-       if (pos == -1 && (!write || (descriptor->open_mode & O_APPEND) == 0)) {
+       if (pos == -1) {
                pos = descriptor->pos;
                movePosition = true;
        }
@@ -768,10 +768,10 @@
        if (status != B_OK)
                return status;

-       if (movePosition)
-               descriptor->pos = pos + length;
-       else if (pos == -1)
-               descriptor->pos = descriptor->ops->fd_seek(descriptor, 0, 
SEEK_END);
+       if (movePosition) {
+               descriptor->pos = write && (descriptor->open_mode & O_APPEND) 
!= 0
+                       ? descriptor->ops->fd_seek(descriptor, 0, SEEK_END) : 
pos + length;
+       }

        return length <= SSIZE_MAX ? (ssize_t)length : SSIZE_MAX;
 }
@@ -810,7 +810,7 @@
                return B_BAD_ADDRESS;

        bool movePosition = false;
-       if (pos == -1 && (!write || (descriptor->open_mode & O_APPEND) == 0)) {
+       if (pos == -1) {
                pos = descriptor->pos;
                movePosition = true;
        }
@@ -854,17 +854,16 @@
                else
                        bytesTransferred += (ssize_t)length;

-               if (pos > -1)
-                       pos += length;
+               pos += length;

                if (length < vecs[i].iov_len)
                        break;
        }

-       if (movePosition)
-               descriptor->pos = pos;
-       else if (pos == -1)
-               descriptor->pos = descriptor->ops->fd_seek(descriptor, 0, 
SEEK_END);
+       if (movePosition) {
+               descriptor->pos = write && (descriptor->open_mode & O_APPEND) 
!= 0
+                       ? descriptor->ops->fd_seek(descriptor, 0, SEEK_END) : 
pos;
+       }

        return bytesTransferred;
 }

--
To view, visit https://review.haiku-os.org/c/haiku/+/3383
To unsubscribe, or for help writing mail filters, visit 
https://review.haiku-os.org/settings

Gerrit-Project: haiku
Gerrit-Branch: master
Gerrit-Change-Id: Ie34c1563bd34dbe9c6cda92e41a2d5a96d20c3b1
Gerrit-Change-Number: 3383
Gerrit-PatchSet: 1
Gerrit-Owner: Jérôme Duval <jerome.duval@xxxxxxxxx>
Gerrit-MessageType: newchange

Other related posts:

  • » [haiku-commits] Change in haiku[master]: kernel/fs: fix previous commit logic - Gerrit