[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-core-devel
Subject: KShell::envExpand
From: "Dawit A." <adawit () kde ! org>
Date: 2003-08-31 7:41:51
[Download RAW message or body]
Any objections to me adding the attached utility function to expand
environment variables to KShell ?
--
Regards,
Dawit A.
"Preach what you practice, practice what you preach"
["kshell-20030831.diff" (text/x-diff)]
Index: kdecore/kshell.cpp
===================================================================
RCS file: /home/kde/kdelibs/kdecore/kshell.cpp,v
retrieving revision 1.6
diff -u -p -b -B -w -r1.6 kshell.cpp
--- kdecore/kshell.cpp 2 Jun 2003 00:20:57 -0000 1.6
+++ kdecore/kshell.cpp 31 Aug 2003 07:04:20 -0000
@@ -374,4 +374,29 @@ QString KShell::homeDir( const QString &
if (!pw)
return QString::null;
return QFile::decodeName( pw->pw_dir );
+}
+
+QString KShell::envExpand ( const QString& str )
+{
+ uint len = str.length();
+
+ if (len > 1 && str[0] == '$')
+ {
+ int pos = str.find ('/');
+
+ if (pos < 0)
+ pos = len;
+
+ char* ret = getenv( QConstString(str.unicode()+1, pos-1).string().local8Bit().data() );
+
+ if (ret)
+ {
+ QString expandedStr ( QFile::decodeName( ret ) );
+ if (pos < len)
+ expandedStr += str.mid(pos);
+ return expandedStr;
+ }
+ }
+
+ return str;
}
Index: kdecore/kshell.h
===================================================================
RCS file: /home/kde/kdelibs/kdecore/kshell.h,v
retrieving revision 1.7
diff -u -p -b -B -w -r1.7 kshell.h
--- kdecore/kshell.h 28 Aug 2003 06:41:43 -0000 1.7
+++ kdecore/kshell.h 31 Aug 2003 07:04:20 -0000
@@ -138,6 +138,14 @@ namespace KShell {
*/
QString homeDir( const QString &user );
+ /**
+ * Performs environment variable expansion on @p variable.
+ *
+ * @param variable the string with the environment variable to expand.
+ * @return the expanded environment variable value. if the variable
+ * cannot be expanded, @p variable itself is returned.
+ */
+ QString envExpand ( const QString &variable );
}
Index: kdecore/tests/kshelltest.cpp
===================================================================
RCS file: /home/kde/kdelibs/kdecore/tests/kshelltest.cpp,v
retrieving revision 1.1
diff -u -p -b -B -w -r1.1 kshelltest.cpp
--- kdecore/tests/kshelltest.cpp 2 Jun 2003 00:18:37 -0000 1.1
+++ kdecore/tests/kshelltest.cpp 31 Aug 2003 07:04:21 -0000
@@ -1,6 +1,38 @@
#include <kshell.h>
+#include <qdir.h>
#include <iostream>
+#include <stdlib.h>
+
+bool test (const QString& str, QString item1, QString item2)
+{
+ if (item1.isEmpty())
+ item1 = QString::null;
+
+ if (item2.isEmpty())
+ item2 = QString::null;
+
+ std::cout << str.local8Bit().data()
+ << " : Got '" << item1.local8Bit().data()
+ << "' Expected '" << item2.local8Bit().data() << "'... ";
+
+ if (item1 == item2)
+ {
+ std::cout << "OK" << std::endl;
+ return true;
+ }
+ else
+ {
+ std::cout << "FAILED" << std::endl;
+ return false;
+ }
+}
+
+void check (bool result)
+{
+ if (!result)
+ exit(1);
+}
static QCString
ps(const QString &s)
@@ -52,4 +84,8 @@ int main()
sj("say `echo meta error`", KShell::AbortOnMeta);
sj("BLA=say echo meta", KShell::AbortOnMeta);
sj("B\"L\"A=say FOO=bar echo meta", KShell::AbortOnMeta);
+
+ check( test("KShell::expandVar($HOME)", KShell::envExpand("$HOME"), QDir::homeDirPath()) );
+ check( test("KShell::expandVar($QTDIR/lib)", KShell::envExpand("$QTDIR/lib"),
+ QString("%1/lib").arg(getenv("QTDIR"))) );
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic