commit e37cb1032aa76478be9955cecece16b37c954cfe
parent f1e7a78ba26a8c12f92afe9434f1e8744e08e378
Author: Jan Klemkow <j.klemkow@wemelug.de>
Date: Sun, 12 Apr 2020 00:01:08 +0200
take default shell if no program argument is given
Diffstat:
2 files changed, 12 insertions(+), 6 deletions(-)
diff --git 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
@@ -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);
}