OSDN Git Service

if device is sequential set the internal QIODevice position instead in QFile::open()
authorIvailo Monev <xakepa10@gmail.com>
Fri, 28 Jan 2022 13:42:00 +0000 (15:42 +0200)
committerIvailo Monev <xakepa10@gmail.com>
Fri, 28 Jan 2022 13:42:10 +0000 (15:42 +0200)
fixes QFile test failures on FreeBSD

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
src/core/io/qfile.cpp

index 7123099..cf4697a 100644 (file)
@@ -807,9 +807,13 @@ bool QFile::open(FILE *fh, OpenMode mode, FileHandleFlags handleFlags)
         if (mode & Append) {
             seek(size());
         } else {
-            qint64 pos = (qint64)QT_FTELL(fh);
-            if (pos != -1)
+            const qint64 pos = (qint64)QT_FTELL(fh);
+            if (pos != -1 && !isSequential()) {
                 seek(pos);
+            } else if (pos != -1) {
+                d->pos = pos;
+                d->devicePos = pos;
+            }
         }
         return true;
     }
@@ -868,8 +872,12 @@ bool QFile::open(int fd, OpenMode mode, FileHandleFlags handleFlags)
             seek(size());
         } else {
             const qint64 pos = (qint64)QT_LSEEK(fd, 0, SEEK_CUR);
-            if (pos != -1)
+            if (pos != -1 && !isSequential()) {
                 seek(pos);
+            } else if (pos != -1) {
+                d->pos = pos;
+                d->devicePos = pos;
+            }
         }
         return true;
     }