summaryrefslogtreecommitdiff
authorkergoth <kergoth>2003-04-22 21:18:03 (UTC)
committer kergoth <kergoth>2003-04-22 21:18:03 (UTC)
commitbb8965d31b06ec122a0916d8c5bc4c4b68873a14 (patch) (side-by-side diff)
tree63a70f536648757440ac38fd003ab10901d439a0
parente3ef0f8587b10bf242d8077609988e06a37bcae5 (diff)
downloadopie-bb8965d31b06ec122a0916d8c5bc4c4b68873a14.zip
opie-bb8965d31b06ec122a0916d8c5bc4c4b68873a14.tar.gz
opie-bb8965d31b06ec122a0916d8c5bc4c4b68873a14.tar.bz2
Alter embeddedkonsole to obey SHELL env var if set, otherwise use the user's default shell, falling back to /bin/sh.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/apps/embeddedkonsole/main.cpp22
1 files changed, 17 insertions, 5 deletions
diff --git a/core/apps/embeddedkonsole/main.cpp b/core/apps/embeddedkonsole/main.cpp
index 167b009..91199eb 100644
--- a/core/apps/embeddedkonsole/main.cpp
+++ b/core/apps/embeddedkonsole/main.cpp
@@ -31,2 +31,5 @@
+#include <pwd.h>
+#include <sys/types.h>
+
@@ -50,9 +53,18 @@ int main(int argc, char* argv[])
const char* shell = getenv("SHELL");
- if (shell == NULL || *shell == '\0')
+
+ if (shell == NULL || *shell == '\0') {
+ struct passwd *ent = 0;
+ uid_t me = getuid();
shell = "/bin/sh";
+
+ while ( (ent = getpwent()) != 0 ) {
+ if (ent->pw_uid == me) {
+ if (ent->pw_shell != "")
+ shell = ent->pw_shell;
+ break;
+ }
+ }
+ endpwent();
+ }
- // sh is completely broken on familiar. Let's try to get something better
- if ( qstrcmp( shell, "/bin/shell" ) == 0 && QFile::exists( "/bin/bash" ) )
- shell = "/bin/bash";
-
if( putenv((char*)"COLORTERM=") !=0)