diff options
| author | Marcus Brinkmann <[email protected]> | 2007-10-05 00:20:43 +0000 | 
|---|---|---|
| committer | Marcus Brinkmann <[email protected]> | 2007-10-05 00:20:43 +0000 | 
| commit | c8deb0385a4aa07e4fad7518e1a88be480a28619 (patch) | |
| tree | 6ffcab0059122302e4a345fa35d54a2317db12cd | |
| parent | 2007-10-04 Marcus Brinkmann <[email protected]> (diff) | |
| download | gpgme-c8deb0385a4aa07e4fad7518e1a88be480a28619.tar.gz gpgme-c8deb0385a4aa07e4fad7518e1a88be480a28619.zip | |
2007-10-05  Marcus Brinkmann  <[email protected]>
	* kdpipeiodevice.cpp, w32-qt-io.cpp: New versions from Frank
	Osterfeld.
Diffstat (limited to '')
| -rw-r--r-- | gpgme/ChangeLog | 5 | ||||
| -rw-r--r-- | gpgme/kdpipeiodevice.cpp | 3 | ||||
| -rw-r--r-- | gpgme/w32-qt-io.cpp | 19 | 
3 files changed, 22 insertions, 5 deletions
| diff --git a/gpgme/ChangeLog b/gpgme/ChangeLog index 77de5ea0..91c202ca 100644 --- a/gpgme/ChangeLog +++ b/gpgme/ChangeLog @@ -1,3 +1,8 @@ +2007-10-05  Marcus Brinkmann  <[email protected]> + +	* kdpipeiodevice.cpp, w32-qt-io.cpp: New versions from Frank +	Osterfeld. +  2007-10-04  Marcus Brinkmann  <[email protected]>  	* kdpipeiodevice.h, kdpipeiodevice.cpp, kdpipeiodevice.moc, diff --git a/gpgme/kdpipeiodevice.cpp b/gpgme/kdpipeiodevice.cpp index 1fd0ef02..3e206c32 100644 --- a/gpgme/kdpipeiodevice.cpp +++ b/gpgme/kdpipeiodevice.cpp @@ -493,7 +493,7 @@ bool KDPipeIODevice::writeWouldBlock() const  {     d->startWriterThread();     LOCKED( d->writer ); -   return d->writer->bufferFull() && !d->writer->error; +   return !d->writer->bufferEmpty() && !d->writer->error;  }   @@ -684,6 +684,7 @@ void Reader::run() {          if ( !cancel && ( eof || error ) ) {  	    qDebug( "%p: Reader::run: received eof(%d) or error(%d), waking everyone", this, eof, error );              notifyReadyRead(); +            cancel = true;          } else if ( !cancel && !bufferFull() && !bufferEmpty() ) {  	    qDebug( "%p: Reader::run: buffer no longer empty, waking everyone", this );              notifyReadyRead(); diff --git a/gpgme/w32-qt-io.cpp b/gpgme/w32-qt-io.cpp index dd17e87f..ba43913c 100644 --- a/gpgme/w32-qt-io.cpp +++ b/gpgme/w32-qt-io.cpp @@ -85,8 +85,9 @@ using _gpgme_::KDPipeIODevice;  #define MAX_SLAFD 1024  struct DeviceEntry { -  DeviceEntry() : iodev( 0 ), refCount( 1 ) {} +  DeviceEntry() : iodev( 0 ), refCount( 1 ), blocking( true ) {}      KDPipeIODevice* iodev; +    bool blocking;      mutable int refCount;      void ref() const { ++refCount; }      int unref() const { assert( refCount > 0 ); return --refCount; } @@ -152,7 +153,11 @@ _gpgme_io_read (int fd, void *buffer, size_t count)        return TRACE_SYSRES (-1);      }    TRACE_LOG1 ("channel %p", chan); - +  if ( iodevice_table[fd] && !iodevice_table[fd]->blocking && chan->readWouldBlock() ) { +      errno = EAGAIN; +      return TRACE_SYSRES( -1 ); +  } +     nread = chan->read ((char *) buffer, count);    if (nread < 0)      { @@ -185,6 +190,11 @@ _gpgme_io_write (int fd, const void *buffer, size_t count)        return -1;      } +  if ( iodevice_table[fd] && !iodevice_table[fd]->blocking && chan->writeWouldBlock() ) +  { +      errno = EAGAIN; +      return TRACE_SYSRES( -1 ); +  }    nwritten = chan->write ((char *) buffer, count);    if (nwritten < 0) @@ -323,8 +333,9 @@ _gpgme_io_set_close_notify (int fd, _gpgme_close_notify_handler_t handler,  int  _gpgme_io_set_nonblocking (int fd)  { -  /* Qt always uses non-blocking IO, except for files, maybe, but who -     uses that?  */ +  DeviceEntry* const entry = iodevice_table[fd]; +  assert( entry ); +  entry->blocking = false;     TRACE_BEG (DEBUG_SYSIO, "_gpgme_io_set_nonblocking", fd);    return TRACE_SYSRES (0);  } | 
