KDE4 porting mailing list?

Simon Hausmann hausmann at kde.org
Mon Nov 28 06:47:37 GMT 2005

On Sunday 27 November 2005 18:39, Stefan Winter wrote:
> Hi,
> apologies for the dumb "I-can't-use-Google" question: is there any mailing
> list about the current status of porting KDE to Qt4, ideally where I could
> place questions about specific caveats?
> In case there isn't, my current problem with getting kdenetwork/wifi
> KWiFiManager to work properly again is:
> QFile apparently doesn't like reading from /proc any more. When I
> open /proc/net/dev with QIODevice::readOnly, I get pos()=0, atEnd=true and
> thus can't read anything out of the file. I've read about QIODevice
> changing behaviour wrt to sequential/non-sequential files, but I didn't
> find a solution to deal with the file properly.
> The code fragment and debug output for this problem is:
> QFile procnetdev("/proc/net/dev");
> if ( !procnetdev.open (QIODevice::ReadOnly) ) {
>   kdDebug () << "Unable to open /proc/net/dev" << endl;
>   return liste;
> };
> kdDebug () << "Autodetecting, QFile pos() = " << procnetdev.pos() << endl;
> kdDebug () << "QFile thinks it has"
>                  << (procnetdev.atEnd() ? " " : " not ")
>                  << "reached the end." << endl;
> kwifimanager: Autodetecting, QFile pos() = 0
> kwifimanager: QFile thinks it has reached the end.

The reason for this change is because in Qt 3 QFile::atEnd() was marked const 
but it actually behind the caller's back tried to read a byte from the given 
file. In this special case that worked, that's why it returned false. But 
otherwise I would say that one wouldn't expect 'atEnd() const' to implicitly 
read from the device.

In Qt 4 atEnd() is simply 'return size() == pos();', where size() is zero in 
your case because the kernel marks /proc/net/dev as regular file but reports 
zero bytes as size in stat.

IMHO it's a question of broken behavior (reading inside 'atEnd() const') 
versus supporting non-standard files (/proc/*) :-/

So if you're using QTextStream to read from the file then in this case you 
have to read the contents manually first ;(


More information about the kde-core-devel mailing list