summaryrefslogtreecommitdiffstats
path: root/openbsd/14.0.0/dependencies/tqt3/patches/patch-src_tools_qfile_unix_cpp
blob: 989554b931dbe011678f46654ff712be8dec0baa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
--- src/tools/qfile_unix.cpp.orig	Fri Sep  5 20:17:49 2014
+++ src/tools/qfile_unix.cpp	Fri Sep  5 20:20:59 2014
@@ -56,6 +56,17 @@
 #include <errno.h>
 #include <limits.h>
 
+class TQFilePrivate
+{
+public:
+    TQString errorString;
+    int lastAccess;
+};
+
+#define ACCESS_NONE -1
+#define ACCESS_READ 0
+#define ACCESS_WRITE 1
+
 extern const char* qt_fileerr_read;
 
 bool qt_file_access( const TQString& fn, int t )
@@ -525,6 +536,7 @@
 #else
 	ok = ( ::fseek(fh, pos, SEEK_SET) == 0 );
 #endif
+    d->lastAccess = ACCESS_NONE;
     }
     if ( ok )
 #if defined(QT_LARGEFILE_SUPPORT) && !defined(QT_ABI_QT4)
@@ -593,6 +605,10 @@
 		setErrorStringErrno( errno );
 	    }
 	} else {					// buffered file
+        if (d->lastAccess == ACCESS_WRITE) {
+        ::fseek(fh, 0, SEEK_CUR);
+        d->lastAccess = ACCESS_READ;
+        }
 	    nread += fread( p, 1, len-nread, fh );
 	    if ( (uint)nread != len ) {
 		if ( ferror( fh ) || nread==0 ) {
@@ -644,8 +660,13 @@
     TQ_ULONG nwritten;				// number of bytes written
     if ( isRaw() )				// raw file
 	nwritten = ::write( fd, (void *)p, len );
-    else					// buffered file
+	else {					// buffered file
+		if (d->lastAccess == ACCESS_READ) {
+			::fseek(fh, 0, SEEK_CUR);
+			d->lastAccess = ACCESS_WRITE;
+		}
 	nwritten = fwrite( p, 1, len, fh );
+	}
     if ( nwritten != len ) {		// write error
 	if ( errno == ENOSPC )			// disk is full
 	    setStatus( IO_ResourceError );