JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
change -e behaviour and update man page.
[st.git] / st.c
diff --git a/st.c b/st.c
index d43c30c..2be6772 100644 (file)
--- a/st.c
+++ b/st.c
@@ -247,7 +247,7 @@ static CSIEscape escseq;
 static int cmdfd;
 static pid_t pid;
 static Selection sel;
-static char *opt_cmd   = NULL;
+static char **opt_cmd  = NULL;
 static char *opt_title = NULL;
 static char *opt_class = NULL;
 
@@ -547,15 +547,12 @@ void
 execsh(void) {
        char **args;
        char *envshell = getenv("SHELL");
-       DEFAULT(envshell, "sh");
 
-       if(opt_cmd)
-               args = (char*[]){"sh", "-c", opt_cmd, NULL};
-       else
-               args = (char*[]){envshell, "-i", NULL};
-       
+       DEFAULT(envshell, "sh");
        putenv("TERM="TNAME);
+       args = opt_cmd ? opt_cmd : (char*[]){envshell, "-i", NULL};
        execvp(args[0], args);
+       exit(EXIT_FAILURE);
 }
 
 void 
@@ -1855,12 +1852,15 @@ main(int argc, char *argv[]) {
                        if(++i < argc) opt_class = argv[i];
                        break;
                case 'e':
-                       if(++i < argc) opt_cmd = argv[i];
+                       if(++i < argc) opt_cmd = &argv[i];
                        break;
                case 'v':
                default:
                        die(USAGE);
                }
+               /* -e eats every remaining arguments */
+               if(opt_cmd)
+                       break;
        }
        setlocale(LC_CTYPE, "");
        tnew(80, 24);