summaryrefslogtreecommitdiffstats
path: root/kdecore/kshell.cpp
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2011-11-06 15:56:40 -0600
committerTimothy Pearson <kb9vqf@pearsoncomputing.net>2011-11-06 15:56:40 -0600
commite16866e072f94410321d70daedbcb855ea878cac (patch)
treeee3f52eabde7da1a0e6ca845fb9c2813cf1558cf /kdecore/kshell.cpp
parenta58c20c1a7593631a1b50213c805507ebc16adaf (diff)
downloadtdelibs-e16866e072f94410321d70daedbcb855ea878cac.tar.gz
tdelibs-e16866e072f94410321d70daedbcb855ea878cac.zip
Actually move the kde files that were renamed in the last commit
Diffstat (limited to 'kdecore/kshell.cpp')
-rw-r--r--kdecore/kshell.cpp377
1 files changed, 0 insertions, 377 deletions
diff --git a/kdecore/kshell.cpp b/kdecore/kshell.cpp
deleted file mode 100644
index 9a9aacfbe..000000000
--- a/kdecore/kshell.cpp
+++ /dev/null
@@ -1,377 +0,0 @@
-/*
- This file is part of the KDE libraries
-
- Copyright (c) 2003 Oswald Buddenhagen <ossi@kde.org>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include <kshell.h>
-
-#include <tqfile.h>
-
-#include <stdlib.h>
-#include <pwd.h>
-#include <sys/types.h>
-
-static int fromHex( TQChar c )
-{
- if (c >= (TQChar)'0' && c <= (TQChar)'9')
- return c - (TQChar)'0';
- else if (c >= (TQChar)'A' && c <= (TQChar)'F')
- return c - (TQChar)'A' + 10;
- else if (c >= (TQChar)'a' && c <= (TQChar)'f')
- return c - (TQChar)'a' + 10;
- return -1;
-}
-
-inline static bool isQuoteMeta( uint c )
-{
-#if 0 // it's not worth it, especially after seeing gcc's asm output ...
- static const uchar iqm[] = {
- 0x00, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00
- }; // \'"$
-
- return (c < sizeof(iqm) * 8) && (iqm[c / 8] & (1 << (c & 7)));
-#else
- return c == (int)'\\' || c == (int)'\'' || c == (int)'"' || c == (int)'$';
-#endif
-}
-
-inline static bool isMeta( uint c )
-{
- static const uchar iqm[] = {
- 0x00, 0x00, 0x00, 0x00, 0xdc, 0x07, 0x00, 0xd8,
- 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x38
- }; // \'"$`<>|;&(){}*?#
-
- return (c < sizeof(iqm) * 8) && (iqm[c / 8] & (1 << (c & 7)));
-}
-
-TQStringList KShell::splitArgs( const TQString &args, int flags, int *err )
-{
- TQStringList ret;
- bool firstword = flags & AbortOnMeta;
-
- for (uint pos = 0; ; ) {
- TQChar c;
- do {
- if (pos >= args.length())
- goto okret;
- c = args.tqunicode()[pos++];
- } while (c.isSpace());
- TQString cret;
- if ((flags & TildeExpand) && c == (QChar)'~') {
- uint opos = pos;
- for (; ; pos++) {
- if (pos >= args.length())
- break;
- c = args.tqunicode()[pos];
- if (c == (QChar)'/' || c.isSpace())
- break;
- if (isQuoteMeta( c )) {
- pos = opos;
- c = (QChar)'~';
- goto notilde;
- }
- if ((flags & AbortOnMeta) && isMeta( c ))
- goto metaerr;
- }
- TQString ccret = homeDir( TQConstString( args.tqunicode() + opos, pos - opos ).string() );
- if (ccret.isEmpty()) {
- pos = opos;
- c = (QChar)'~';
- goto notilde;
- }
- if (pos >= args.length()) {
- ret += ccret;
- goto okret;
- }
- pos++;
- if (c.isSpace()) {
- ret += ccret;
- firstword = false;
- continue;
- }
- cret = ccret;
- }
- // before the notilde label, as a tilde does not match anyway
- if (firstword) {
- if (c == (QChar)'_' || (c >= (QChar)'A' && c <= (QChar)'Z') || (c >= (QChar)'a' && c <= (QChar)'z')) {
- uint pos2 = pos;
- TQChar cc;
- do
- cc = args[pos2++];
- while (cc == (QChar)'_' || (cc >= (QChar)'A' && cc <= (QChar)'Z') ||
- (cc >= (QChar)'a' && cc <= (QChar)'z') || (cc >= (QChar)'0' && cc <= (QChar)'9'));
- if (cc == (QChar)'=')
- goto metaerr;
- }
- }
- notilde:
- do {
- if (c == (QChar)'\'') {
- uint spos = pos;
- do {
- if (pos >= args.length())
- goto quoteerr;
- c = args.tqunicode()[pos++];
- } while (c != (QChar)'\'');
- cret += TQConstString( args.tqunicode() + spos, pos - spos - 1 ).string();
- } else if (c == (QChar)'"') {
- for (;;) {
- if (pos >= args.length())
- goto quoteerr;
- c = args.tqunicode()[pos++];
- if (c == (QChar)'"')
- break;
- if (c == (QChar)'\\') {
- if (pos >= args.length())
- goto quoteerr;
- c = args.tqunicode()[pos++];
- if (c != (QChar)'"' && c != (QChar)'\\' &&
- !((flags & AbortOnMeta) && (c == (QChar)'$' || c == (QChar)'`')))
- cret += (QChar)'\\';
- } else if ((flags & AbortOnMeta) && (c == (QChar)'$' || c == (QChar)'`'))
- goto metaerr;
- cret += c;
- }
- } else if (c == (QChar)'$' && args[pos] == (QChar)'\'') {
- pos++;
- for (;;) {
- if (pos >= args.length())
- goto quoteerr;
- c = args.tqunicode()[pos++];
- if (c == (QChar)'\'')
- break;
- if (c == (QChar)'\\') {
- if (pos >= args.length())
- goto quoteerr;
- c = args.tqunicode()[pos++];
- switch (c) {
- case 'a': cret += (QChar)'\a'; break;
- case 'b': cret += (QChar)'\b'; break;
- case 'e': cret += (QChar)'\033'; break;
- case 'f': cret += (QChar)'\f'; break;
- case 'n': cret += (QChar)'\n'; break;
- case 'r': cret += (QChar)'\r'; break;
- case 't': cret += (QChar)'\t'; break;
- case '\\': cret += (QChar)'\\'; break;
- case '\'': cret += (QChar)'\''; break;
- case 'c': cret += args[pos++] & 31; break;
- case 'x':
- {
- int hv = fromHex( args[pos] );
- if (hv < 0) {
- cret += "\\x";
- } else {
- int hhv = fromHex( args[++pos] );
- if (hhv > 0) {
- hv = hv * 16 + hhv;
- pos++;
- }
- cret += TQChar( hv );
- }
- break;
- }
- default:
- if (c >= (QChar)'0' && c <= (QChar)'7') {
- int hv = c - '0';
- for (int i = 0; i < 2; i++) {
- c = args[pos];
- if (c < (QChar)'0' || c > (QChar)'7')
- break;
- hv = hv * 8 + (c - '0');
- pos++;
- }
- cret += TQChar( hv );
- } else {
- cret += '\\';
- cret += c;
- }
- break;
- }
- } else
- cret += c;
- }
- } else {
- if (c == (QChar)'\\') {
- if (pos >= args.length())
- goto quoteerr;
- c = args.tqunicode()[pos++];
- if (!c.isSpace() &&
- !((flags & AbortOnMeta) ? isMeta( c ) : isQuoteMeta( c )))
- cret += '\\';
- } else if ((flags & AbortOnMeta) && isMeta( c ))
- goto metaerr;
- cret += c;
- }
- if (pos >= args.length())
- break;
- c = args.tqunicode()[pos++];
- } while (!c.isSpace());
- ret += cret;
- firstword = false;
- }
-
- okret:
- if (err)
- *err = NoError;
- return ret;
-
- quoteerr:
- if (err)
- *err = BadQuoting;
- return TQStringList();
-
- metaerr:
- if (err)
- *err = FoundMeta;
- return TQStringList();
-}
-
-inline static bool isSpecial( uint c )
-{
- static const uchar iqm[] = {
- 0xff, 0xff, 0xff, 0xff, 0xdd, 0x07, 0x00, 0xd8,
- 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x38
- }; // 0-32 \'"$`<>|;&(){}*?#
-
- return (c < sizeof(iqm) * 8) && (iqm[c / 8] & (1 << (c & 7)));
-}
-
-TQString KShell::joinArgs( const TQStringList &args )
-{
- TQChar q( '\'' );
- TQString ret;
- for (TQStringList::ConstIterator it = args.begin(); it != args.end(); ++it) {
- if (!ret.isEmpty())
- ret += ' ';
- if (!(*it).length())
- ret.append( q ).append( q );
- else {
- for (uint i = 0; i < (*it).length(); i++)
- if (isSpecial((*it).tqunicode()[i])) {
- TQString tmp(*it);
- tmp.replace( q, "'\\''" );
- ret += q;
- tmp += q;
- ret += tmp;
- goto ex;
- }
- ret += *it;
- ex: ;
- }
- }
- return ret;
-}
-
-TQString KShell::joinArgs( const char * const *args, int nargs )
-{
- if (!args)
- return TQString::null; // well, TQString::empty, in fact. qt sucks ;)
- TQChar q( '\'' );
- TQString ret;
- for (const char * const *argp = args; nargs && *argp; argp++, nargs--) {
- if (!ret.isEmpty())
- ret += ' ';
- if (!**argp)
- ret.append( q ).append( q );
- else {
- TQString tmp( TQFile::decodeName( *argp ) );
- for (uint i = 0; i < tmp.length(); i++)
- if (isSpecial(tmp.tqunicode()[i])) {
- tmp.replace( q, "'\\''" );
- ret += q;
- tmp += q;
- ret += tmp;
- goto ex;
- }
- ret += tmp;
- ex: ;
- }
- }
- return ret;
-}
-
-TQString KShell::joinArgsDQ( const TQStringList &args )
-{
- TQChar q( '\'' ), sp( ' ' ), bs( '\\' );
- TQString ret;
- for (TQStringList::ConstIterator it = args.begin(); it != args.end(); ++it) {
- if (!ret.isEmpty())
- ret += sp;
- if (!(*it).length())
- ret.append( q ).append( q );
- else {
- for (uint i = 0; i < (*it).length(); i++)
- if (isSpecial((*it).tqunicode()[i])) {
- ret.append( '$' ).append( q );
- for (uint pos = 0; pos < (*it).length(); pos++) {
- int c = (*it).tqunicode()[pos];
- if (c < 32) {
- ret += bs;
- switch (c) {
- case '\a': ret += 'a'; break;
- case '\b': ret += 'b'; break;
- case '\033': ret += 'e'; break;
- case '\f': ret += 'f'; break;
- case '\n': ret += 'n'; break;
- case '\r': ret += 'r'; break;
- case '\t': ret += 't'; break;
- case '\034': ret += 'c'; ret += '|'; break;
- default: ret += 'c'; ret += c + '@'; break;
- }
- } else {
- if (c == '\'' || c == '\\')
- ret += bs;
- ret += c;
- }
- }
- ret.append( q );
- goto ex;
- }
- ret += *it;
- ex: ;
- }
- }
- return ret;
-}
-
-TQString KShell::tildeExpand( const TQString &fname )
-{
- if (fname[0] == (QChar)'~') {
- int pos = fname.find( '/' );
- if (pos < 0)
- return homeDir( TQConstString( fname.tqunicode() + 1, fname.length() - 1 ).string() );
- TQString ret = homeDir( TQConstString( fname.tqunicode() + 1, pos - 1 ).string() );
- if (!ret.isNull())
- ret += TQConstString( fname.tqunicode() + pos, fname.length() - pos ).string();
- return ret;
- }
- return fname;
-}
-
-TQString KShell::homeDir( const TQString &user )
-{
- if (user.isEmpty())
- return TQFile::decodeName( getenv( "HOME" ) );
- struct passwd *pw = getpwnam( TQFile::encodeName( user ).data() );
- if (!pw)
- return TQString::null;
- return TQFile::decodeName( pw->pw_dir );
-}