diff options
author | markd <markd@pkgsrc.org> | 2012-03-20 05:07:48 +0000 |
---|---|---|
committer | markd <markd@pkgsrc.org> | 2012-03-20 05:07:48 +0000 |
commit | 8b97c420f900fb76b931dfaeaf21375a417a9575 (patch) | |
tree | 692f93bd488b6f1887121a9508f8298cb0668459 /x11/konsole/patches | |
parent | d0d457c01c57c30a9a2baa4a5754027e187f87f8 (diff) | |
download | pkgsrc-8b97c420f900fb76b931dfaeaf21375a417a9575.tar.gz |
Import konsole. A part of KDE SC 4.8.0
a terminal emulator for the K Desktop Environment
Diffstat (limited to 'x11/konsole/patches')
-rw-r--r-- | x11/konsole/patches/patch-src_ProcessInfo.cpp | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/x11/konsole/patches/patch-src_ProcessInfo.cpp b/x11/konsole/patches/patch-src_ProcessInfo.cpp new file mode 100644 index 00000000000..b9b1f4eb57b --- /dev/null +++ b/x11/konsole/patches/patch-src_ProcessInfo.cpp @@ -0,0 +1,185 @@ +$NetBSD: patch-src_ProcessInfo.cpp,v 1.1.1.1 2012/03/20 05:07:49 markd Exp $ + +--- src/ProcessInfo.cpp.orig 2010-03-26 17:26:32.000000000 +0000 ++++ src/ProcessInfo.cpp +@@ -894,6 +894,171 @@ private: + } + } ; + ++class NetBSDProcessInfo : public UnixProcessInfo ++{ ++public: ++ NetBSDProcessInfo(int pid, bool env) : ++ UnixProcessInfo(pid,env) ++ { ++ } ++ ++private: ++ virtual bool readProcInfo(int pid) ++ { ++ // indicies of various fields within the process status file which ++ // contain various information about the process ++ const int PARENT_PID_FIELD = 2; ++ const int PROCESS_NAME_FIELD = 0; ++ const int GROUP_PROCESS_FIELD = 3; ++ const int UID_PROCESS_FIELD = 11; ++ ++ QString parentPidString; ++ QString processNameString; ++ QString foregroundPidString; ++ QString uidString; ++ ++ // read process status file ( /proc/<pid/status ) ++ // ++ // the expected file format is a list of fields separated by spaces, using ++ // parenthesies to escape fields such as the process name which may itself contain ++ // spaces: ++ // ++ // FIELD FIELD (FIELD WITH SPACES) FIELD FIELD ++ // ++ QFile processInfo( QString("/proc/%1/status").arg(pid) ); ++ if ( processInfo.open(QIODevice::ReadOnly) ) ++ { ++ QTextStream stream(&processInfo); ++ QString data = stream.readAll(); ++ ++ int stack = 0; ++ int field = 0; ++ int pos = 0; ++ ++ while (pos < data.count()) ++ { ++ QChar c = data[pos]; ++ ++ if ( c == '(' ) ++ stack++; ++ else if ( c == ')' ) ++ stack--; ++ else if ( stack == 0 && c == ' ' ) ++ field++; ++ else ++ { ++ switch ( field ) ++ { ++ case PARENT_PID_FIELD: ++ parentPidString.append(c); ++ break; ++ case PROCESS_NAME_FIELD: ++ processNameString.append(c); ++ break; ++ case GROUP_PROCESS_FIELD: ++ foregroundPidString.append(c); ++ break; ++ case UID_PROCESS_FIELD: ++ uidString.append(c); ++ break; ++ } ++ } ++ ++ pos++; ++ } ++ } ++ else ++ { ++ setFileError( processInfo.error() ); ++ return false; ++ } ++ ++ // check that data was read successfully ++ bool ok = false; ++ ++ // uid string must be less than 5 chars (uint) ++ if (uidString.size() > 5) ++ uidString.clear(); ++ ++ int uid = uidString.toInt(&ok); ++ if (ok) ++ setUserId(uid); ++ readUserName(); ++ ++ int foregroundPid = foregroundPidString.toInt(&ok); ++ if (ok) ++ setForegroundPid(foregroundPid); ++ ++ int parentPid = parentPidString.toInt(&ok); ++ if (ok) ++ setParentPid(parentPid); ++ ++ if (!processNameString.isEmpty()) ++ setName(processNameString); ++ ++ // update object state ++ setPid(pid); ++ ++ return ok; ++ } ++ ++ virtual bool readArguments(int pid) ++ { ++ // read command-line arguments file found at /proc/<pid>/cmdline ++ // the expected format is a list of strings delimited by null characters, ++ // and ending in a double null character pair. ++ ++ QFile argumentsFile( QString("/proc/%1/cmdline").arg(pid) ); ++ if ( argumentsFile.open(QIODevice::ReadOnly) ) ++ { ++ QTextStream stream(&argumentsFile); ++ QString data = stream.readAll(); ++ ++ QStringList argList = data.split( QChar('\0') ); ++ ++ foreach ( const QString &entry , argList ) ++ { ++ if (!entry.isEmpty()) ++ addArgument(entry); ++ } ++ } ++ else ++ { ++ setFileError( argumentsFile.error() ); ++ } ++ ++ return true; ++ } ++ ++ virtual bool readCurrentDir(int pid) ++ { ++ QFileInfo info( QString("/proc/%1/cwd").arg(pid) ); ++ ++ const bool readable = info.isReadable(); ++ ++ if ( readable && info.isSymLink() ) ++ { ++ setCurrentDir( info.symLinkTarget() ); ++ return true; ++ } ++ else ++ { ++ if ( !readable ) ++ setError( PermissionsError ); ++ else ++ setError( UnknownError ); ++ ++ return false; ++ } ++ } ++ ++ virtual bool readEnvironment(int pid) ++ { ++ // Not supported in NetBSD ++ return true; ++ } ++} ; ++ + SSHProcessInfo::SSHProcessInfo(const ProcessInfo& process) + : _process(process) + { +@@ -1039,6 +1204,8 @@ ProcessInfo* ProcessInfo::newInstance(in + return new LinuxProcessInfo(pid,enableEnvironmentRead); + #elif defined(Q_OS_SOLARIS) + return new SolarisProcessInfo(pid,enableEnvironmentRead); ++#elif defined(Q_OS_NETBSD) ++ return new NetBSDProcessInfo(pid,enableEnvironmentRead); + #elif defined(Q_OS_MAC) + return new MacProcessInfo(pid,enableEnvironmentRead); + #elif defined(Q_OS_FREEBSD) |