commit e37cb1032aa76478be9955cecece16b37c954cfe
Author:     Jan Klemkow <[email protected]>
AuthorDate: Sun Apr 12 00:01:08 2020 +0200
Commit:     Jan Klemkow <[email protected]>
CommitDate: Sun Apr 12 00:01:08 2020 +0200

    take default shell if no program argument is given

diff --git a/scroll.1 b/scroll.1
index f5e8d31..f6fa3b1 100644
--- a/scroll.1
+++ b/scroll.1
@@ -23,7 +23,7 @@
 .Nm
 .Op Fl M
 .Op Fl m Ar size
-.Ar program
+.Op program Op arg ...
 .Sh DESCRIPTION
 The
 .Nm
diff --git a/scroll.c b/scroll.c
index aec6496..7754634 100644
--- a/scroll.c
+++ b/scroll.c
@@ -27,6 +27,7 @@
 #include <errno.h>
 #include <fcntl.h>
 #include <poll.h>
+#include <pwd.h>
 #include <signal.h>
 #include <stdarg.h>
 #include <stdbool.h>
@@ -369,7 +370,7 @@ jumpdown(char *buf, size_t size)
 
 void
 usage(void) {
-       die("usage: scroll [-M] [-m mem] <program>");
+       die("usage: scroll [-M] [-m mem] [program]");
 }
 
 int
@@ -405,9 +406,6 @@ main(int argc, char *argv[])
        if (isatty(STDOUT_FILENO) == 0)
                die("stdout it not a tty");
 
-       if (argc < 1)
-               usage();
-
        /* save terminal settings for resetting after exit */
        if (tcgetattr(STDIN_FILENO, &dfl) == -1)
                die("tcgetattr:");
@@ -422,7 +420,15 @@ main(int argc, char *argv[])
        if (child == -1)
                die("forkpty:");
        if (child == 0) {       /* child */
-               execvp(argv[0], argv);
+               if (argc >= 1) {
+                       execvp(argv[0], argv);
+               } else {
+                       struct passwd *passwd = getpwuid(getuid());
+                       if (passwd == NULL)
+                               die("getpwid:");
+                       execlp(passwd->pw_shell, passwd->pw_shell, NULL);
+               }
+
                perror("execvp");
                _exit(127);
        }

Reply via email to