[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: Re: kdeadmin/ksysv
From: Toshitaka Fujioka <toshitaka () crux ! ocn ! ne ! jp>
Date: 2003-07-22 16:10:27
[Download RAW message or body]
Hello,
On Tuesday 22 July 2003 18:01, Oswald Buddenhagen wrote:
> anyway, you did the same mistake i commented about two days ago:
> calling fromLocal8Bit on separate chunks from kprocess is _evil_.
> first concatenate, then split the lines and convert (the order of the
> latter two does not matter; but it usually makes sense to convert a line
> as soon as it becomes complete).
Hmm.... I see. But I was not able to understand a bit.
I attached a patch. This patch is OK ?
Regards,
Toshitaka
["kdeadmin-ksysv-fix-kprocess-20030723.diff" (text/x-diff)]
diff -ur kdeadmin.orig/ksysv/OldView.cpp kdeadmin/ksysv/OldView.cpp
--- kdeadmin.orig/ksysv/OldView.cpp 2003-07-21 23:08:38.000000000 +0900
+++ kdeadmin/ksysv/OldView.cpp 2003-07-23 00:49:59.000000000 +0900
@@ -82,7 +82,7 @@
mScriptBox (0L),
mRunlevels (new QVBox*[ksv::runlevelNumber]),
mOrigin (0L),
- mOpenWithMenu (openWithMenu)
+ mOpenWithMenu (openWithMenu), m_buffer( QCString() )
{
setOpaqueResize (true);
@@ -611,8 +611,8 @@
*_proc << path << "stop";
connect(_proc, SIGNAL(processExited(KProcess*)), this, \
SLOT(slotExitedProcess(KProcess*)));
- connect(_proc, SIGNAL(receivedStdout(KProcess*, char*, int)), this, \
SLOT(slotOutput(KProcess*, char*, int)));
- connect(_proc, SIGNAL(receivedStderr(KProcess*, char*, int)), this, \
SLOT(slotErr(KProcess*, char*, int))); + connect(_proc, \
SIGNAL(receivedStdout(KProcess*, char*, int)), this, \
SLOT(slotOutputOrError(KProcess*, char*, int))); + connect(_proc, \
SIGNAL(receivedStderr(KProcess*, char*, int)), this, \
SLOT(slotOutputOrError(KProcess*, char*, int)));
// refresh textDisplay
appendLog(i18n("** <stop>Stopping</stop> <cmd>%1</cmd> **<br/>").arg(path),
@@ -637,8 +637,8 @@
*_proc << path << "start";
connect(_proc, SIGNAL(processExited(KProcess*)), this, \
SLOT(slotExitedProcess(KProcess*)));
- connect(_proc, SIGNAL(receivedStdout(KProcess*, char*, int)), this, \
SLOT(slotOutput(KProcess*, char*, int)));
- connect(_proc, SIGNAL(receivedStderr(KProcess*, char*, int)), this, \
SLOT(slotErr(KProcess*, char*, int))); + connect(_proc, \
SIGNAL(receivedStdout(KProcess*, char*, int)), this, \
SLOT(slotOutputOrError(KProcess*, char*, int))); + connect(_proc, \
SIGNAL(receivedStderr(KProcess*, char*, int)), this, \
SLOT(slotOutputOrError(KProcess*, char*, int)));
// refresh textDisplay
appendLog(i18n("** <start>Starting</start> <cmd>%1</cmd> **<br/>").arg(path),
@@ -677,8 +677,8 @@
*_proc << path << "restart";
connect(_proc, SIGNAL(processExited(KProcess*)), this, \
SLOT(slotExitDuringRestart(KProcess*)));
- connect(_proc, SIGNAL(receivedStdout(KProcess*, char*, int)), this, \
SLOT(slotOutput(KProcess*, char*, int)));
- connect(_proc, SIGNAL(receivedStderr(KProcess*, char*, int)), this, \
SLOT(slotErr(KProcess*, char*, int))); + connect(_proc, \
SIGNAL(receivedStdout(KProcess*, char*, int)), this, \
SLOT(slotOutputOrError(KProcess*, char*, int))); + connect(_proc, \
SIGNAL(receivedStderr(KProcess*, char*, int)), this, \
SLOT(slotOutputOrError(KProcess*, char*, int)));
// refresh textDisplay
appendLog(i18n("** Re-starting <cmd>%1</cmd> **</br>").arg(path),
@@ -690,19 +690,10 @@
emit sigRun(path + i18n(" restart"));
}
-void KSVContent::slotOutput( KProcess*, char* _buffer, int _buflen) {
+void KSVContent::slotOutputOrError( KProcess*, char* _buffer, int _buflen) {
if (_buflen > 0) {
- QCString buffer = QCString( _buffer, _buflen + 1 );
- buffer[_buflen]='\0';
- appendLog( QString::fromLocal8Bit( buffer ), QString::fromLocal8Bit( buffer ) );
- }
-}
-
-void KSVContent::slotErr( KProcess*, char* _buffer, int _buflen) {
- if (_buflen > 0) {
- QCString buffer = QCString( _buffer, _buflen + 1);
- buffer[_buflen]='\0';
- appendLog( QString::fromLocal8Bit( buffer ), QString::fromLocal8Bit( buffer ) );
+ m_buffer += QCString( _buffer, _buflen + 1 );
+ appendLog( m_buffer );
}
}
@@ -749,8 +740,8 @@
proc->clearArguments();
connect(proc, SIGNAL(processExited(KProcess*)), this, \
SLOT(slotExitedProcess(KProcess*)));
- connect(proc, SIGNAL(receivedStdout(KProcess*, char*, int)), this, \
SLOT(slotOutput(KProcess*, char*, int)));
- connect(proc, SIGNAL(receivedStderr(KProcess*, char*, int)), this, \
SLOT(slotErr(KProcess*, char*, int))); + connect(proc, \
SIGNAL(receivedStdout(KProcess*, char*, int)), this, \
SLOT(slotOutputOrError(KProcess*, char*, int))); + connect(proc, \
SIGNAL(receivedStderr(KProcess*, char*, int)), this, \
SLOT(slotOutputOrError(KProcess*, char*, int)));
proc->start(KProcess::NotifyOnExit, KProcess::AllOutput);
}
@@ -809,6 +800,15 @@
textDisplay->append (rich);
}
+void KSVContent::appendLog(const QCString& _buffer)
+{
+ QStringList _lines = QStringList::split( "\n", QString::fromLocal8Bit( _buffer ) \
); + for ( QStringList::Iterator it = _lines.begin(); it != _lines.end(); ++it )
+ appendLog( *it, *it );
+
+ m_buffer = QCString();
+}
+
const QString& KSVContent::log () const
{
return mLogText;
diff -ur kdeadmin.orig/ksysv/OldView.h kdeadmin/ksysv/OldView.h
--- kdeadmin.orig/ksysv/OldView.h 2003-07-21 23:08:38.000000000 +0900
+++ kdeadmin/ksysv/OldView.h 2003-07-23 00:49:59.000000000 +0900
@@ -94,13 +94,13 @@
void restartService (const QString& path);
void editService();
void editService (const QString& path);
- void slotOutput( KProcess* _p, char* _buffer, int _buflen );
- void slotErr( KProcess* _p, char* _buffer, int _buflen );
+ void slotOutputOrError( KProcess* _p, char* _buffer, int _buflen );
void slotExitedProcess(KProcess* proc);
void slotScriptsNotRemovable();
void slotDoubleClick (QListViewItem*);
void slotExitDuringRestart(KProcess* proc);
void appendLog(const QString& rich, const QString& plain);
+ void appendLog(const QCString& _buffer);
void fwdCannotGenerateNumber();
void fwdOrigin();
void reSortRL();
@@ -174,6 +174,8 @@
KPopupMenu* mOpenWithMenu;
KTrader::OfferList mOpenWithOffers;
+
+ QCString m_buffer;
};
#endif
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic