78 lines
2.1 KiB
Plaintext
78 lines
2.1 KiB
Plaintext
$OpenBSD: patch-src_tools_qfile_cpp,v 1.2 2007/01/04 18:34:46 espie Exp $
|
|
--- src/tools/qfile.cpp.orig Thu Oct 19 16:25:01 2006
|
|
+++ src/tools/qfile.cpp Tue Jan 2 15:36:11 2007
|
|
@@ -70,8 +70,13 @@ class QFilePrivate
|
|
{
|
|
public:
|
|
QString errorString;
|
|
+ int lastAccess;
|
|
};
|
|
|
|
+#define ACCESS_NONE -1
|
|
+#define ACCESS_READ 0
|
|
+#define ACCESS_WRITE 1
|
|
+
|
|
extern bool qt_file_access( const QString& fn, int t );
|
|
|
|
/*!
|
|
@@ -196,6 +201,7 @@ void QFile::init()
|
|
{
|
|
delete d;
|
|
d = new QFilePrivate;
|
|
+ d->lastAccess = ACCESS_NONE;
|
|
setFlags( IO_Direct );
|
|
setStatus( IO_Ok );
|
|
setErrorString( qt_fileerr_unknown );
|
|
@@ -206,7 +212,6 @@ void QFile::init()
|
|
ext_f = FALSE; // not an external file handle
|
|
}
|
|
|
|
-
|
|
/*!
|
|
\fn QString QFile::name() const
|
|
|
|
@@ -382,6 +387,10 @@ Q_LONG QFile::readLine( char *p, Q_ULONG
|
|
if ( isRaw() ) { // raw file
|
|
nread = QIODevice::readLine( p, maxlen );
|
|
} else { // buffered file
|
|
+ if (d->lastAccess == ACCESS_WRITE) {
|
|
+ ::fseek(fh, 0, SEEK_CUR);
|
|
+ d->lastAccess = ACCESS_READ;
|
|
+ }
|
|
p = fgets( p, maxlen, fh );
|
|
if ( p ) {
|
|
nread = qstrlen( p );
|
|
@@ -463,6 +472,10 @@ int QFile::getch()
|
|
char buf[1];
|
|
ch = readBlock( buf, 1 ) == 1 ? buf[0] : EOF;
|
|
} else { // buffered file
|
|
+ if (d->lastAccess == ACCESS_WRITE) {
|
|
+ ::fseek(fh, 0, SEEK_CUR);
|
|
+ d->lastAccess = ACCESS_READ;
|
|
+ }
|
|
if ( (ch = getc( fh )) != EOF ) {
|
|
if ( !isSequentialAccess() )
|
|
ioIndex++;
|
|
@@ -499,6 +512,10 @@ int QFile::putch( int ch )
|
|
buf[0] = ch;
|
|
ch = writeBlock( buf, 1 ) == 1 ? ch : EOF;
|
|
} else { // buffered file
|
|
+ if (d->lastAccess == ACCESS_READ) {
|
|
+ ::fseek(fh, 0, SEEK_CUR);
|
|
+ d->lastAccess = ACCESS_WRITE;
|
|
+ }
|
|
if ( (ch = putc( ch, fh )) != EOF ) {
|
|
if ( !isSequentialAccess() )
|
|
ioIndex++;
|
|
@@ -553,6 +570,10 @@ int QFile::ungetch( int ch )
|
|
else
|
|
ch = EOF;
|
|
} else { // buffered file
|
|
+ if (d->lastAccess == ACCESS_WRITE) {
|
|
+ ::fseek(fh, 0, SEEK_CUR);
|
|
+ d->lastAccess = ACCESS_READ;
|
|
+ }
|
|
if ( (ch = ungetc(ch, fh)) != EOF ) {
|
|
if ( !isSequentialAccess() )
|
|
ioIndex--;
|