aboutsummaryrefslogtreecommitdiffstats
path: root/kgpg/klinebufferedprocess.cpp
diff options
context:
space:
mode:
authornils <nils@34ebc366-c3a9-4b3c-9f84-69acf7962910>2012-08-02 00:05:44 +0000
committernils <nils@34ebc366-c3a9-4b3c-9f84-69acf7962910>2012-08-02 00:05:44 +0000
commit4149c8712b45791605ea3502c00baa94b0948f33 (patch)
treee3e9d021b5d8e73a36ed5b2fda48b0fe2dc81e38 /kgpg/klinebufferedprocess.cpp
parentstart removing gpgme (diff)
downloadgpg4usb-4149c8712b45791605ea3502c00baa94b0948f33.tar.gz
gpg4usb-4149c8712b45791605ea3502c00baa94b0948f33.zip
try to integrate gpg wrapper from kgpg - broken now
git-svn-id: http://cpunk.de/svn/src/gpg4usb/branches/0.3.2-mac@921 34ebc366-c3a9-4b3c-9f84-69acf7962910
Diffstat (limited to 'kgpg/klinebufferedprocess.cpp')
-rw-r--r--kgpg/klinebufferedprocess.cpp112
1 files changed, 112 insertions, 0 deletions
diff --git a/kgpg/klinebufferedprocess.cpp b/kgpg/klinebufferedprocess.cpp
new file mode 100644
index 0000000..00099af
--- /dev/null
+++ b/kgpg/klinebufferedprocess.cpp
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2008 Rolf Eike Beer <[email protected]>
+ */
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include "klinebufferedprocess.h"
+
+
+KLineBufferedProcessPrivate::KLineBufferedProcessPrivate(KLineBufferedProcess *parent)
+ : m_newlineInStdout(-1),
+ m_newlineInStderr(-1),
+ m_parent(parent),
+#ifdef Q_OS_WIN32 //krazy:exclude=cpp
+ m_lineEnd("\r\n")
+#else
+ m_lineEnd("\n")
+#endif
+{
+}
+
+KLineBufferedProcess::KLineBufferedProcess(QObject *parent)
+ : KProcess(parent),
+ d(new KLineBufferedProcessPrivate(this))
+{
+ connect(this, SIGNAL(readyReadStandardOutput()), this, SLOT(_k_receivedStdout()));
+ connect(this, SIGNAL(readyReadStandardError()), this, SLOT(_k_receivedStderr()));
+}
+
+KLineBufferedProcess::~KLineBufferedProcess()
+{
+ delete d;
+}
+
+void KLineBufferedProcessPrivate::_k_receivedStdout()
+{
+ QByteArray ndata = m_parent->readAllStandardOutput();
+ int oldBufferSize = m_stdoutBuffer.size();
+ m_stdoutBuffer.append(ndata);
+
+ if (m_newlineInStdout < 0) {
+ m_newlineInStdout = ndata.indexOf(m_lineEnd);
+ if (m_newlineInStdout >= 0) {
+ m_newlineInStdout += oldBufferSize;
+ emit m_parent->lineReadyStandardOutput();
+ }
+ }
+}
+
+void KLineBufferedProcessPrivate::_k_receivedStderr()
+{
+ QByteArray ndata = m_parent->readAllStandardError();
+ int oldBufferSize = m_stderrBuffer.size();
+ m_stderrBuffer.append(ndata);
+
+ if (m_newlineInStderr < 0) {
+ m_newlineInStderr = ndata.indexOf(m_lineEnd);
+ if (m_newlineInStderr >= 0) {
+ m_newlineInStderr += oldBufferSize;
+ emit m_parent->lineReadyStandardError();
+ }
+ }
+}
+
+bool KLineBufferedProcess::readLineStandardOutput(QByteArray *line)
+{
+ if (d->m_newlineInStdout < 0) {
+ return false;
+ }
+
+ // don't copy '\n'
+ *line = d->m_stdoutBuffer.left(d->m_newlineInStdout);
+ d->m_stdoutBuffer.remove(0, d->m_newlineInStdout + d->m_lineEnd.length());
+
+ d->m_newlineInStdout = d->m_stdoutBuffer.indexOf(d->m_lineEnd);
+
+ return true;
+}
+
+bool KLineBufferedProcess::readLineStandardError(QByteArray *line)
+{
+ if (d->m_newlineInStderr < 0) {
+ return false;
+ }
+
+ // don't copy '\n'
+ *line = d->m_stderrBuffer.left(d->m_newlineInStderr);
+ d->m_stderrBuffer.remove(0, d->m_newlineInStderr + d->m_lineEnd.length());
+
+ d->m_newlineInStderr = d->m_stderrBuffer.indexOf(d->m_lineEnd);
+
+ return true;
+}
+
+bool KLineBufferedProcess::hasLineStandardOutput() const
+{
+ return d->m_newlineInStdout >= 0;
+}
+
+bool KLineBufferedProcess::hasLineStandardError() const
+{
+ return d->m_newlineInStderr >= 0;
+}
+
+//#include "moc_klinebufferedprocess.cpp"