KProcess Line Mode Patch

Andreas Pakulat apaku at gmx.de
Tue Dec 2 13:23:51 GMT 2008


On 02.12.08 13:51:57, Ralf Habacker wrote:
> Appended is a proposal for such a class working with the  
> QProcess/KProcess output channel.
>
> One question I have is where in the kdelibs such a class could be located ?
..
> +#include <QtDebug>

That is probably not wanted in this code.

> +qint64 KLineBasedReader::readLine(char * data, qint64 maxSize)
> +{
> +    qint64 ret = m_p->readLine(data, maxSize);
> +    if (ret <= 0)
> +        return ret;
> +    if (data[strlen(data)-2] == '\x0d' && data[strlen(data)-1] == '\x0a')

That won't happen, QIODevice will already replace windows line-endings with
unix-ones (unless you don't use QIODevice::Text, in which case you
shouldn't be reading lines).

> +        data[strlen(data)-2] = '\0';
> +    else if (data[strlen(data)-1] == '\x0a')
> +        data[strlen(data)-1] = '\0';
> +    return ret;
> +}

With the above changes, what exactly is the benefit of this class? IMHO it
doesn't provide any real value compared to listening for the readyRead()
signal from QIODevice+checking for canReadLine and then reading the line
into a char* or even a QByteArray.

So where are the two apps that use this class? And why do they use it?

> +QString KLineBasedReader::readLine (qint64 maxSize)
> +{
> +    QString data = m_p->readLine(maxSize);

Again the encoding problem, readLine returns a QByteArray, you can't just
convert that to a QString without knowing the right encoding.

> +#include <QObject>

This needs to be QtCore/QObject

> +private Q_SLOTS:
> +    void slotReadyRead(); 

This should use the Q_PRIVATE_SLOT macro

> +private: 
> +    QIODevice *m_p;

public API needs to have a d-pointer.

Andreas

-- 
Your boss is a few sandwiches short of a picnic.




More information about the kde-core-devel mailing list