aboutsummaryrefslogtreecommitdiffstats
path: root/pw.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2022-05-08 08:18:54 -0700
committerKaz Kylheku <kaz@kylheku.com>2022-05-08 08:18:54 -0700
commit7ff253cfee19cb798096dd0193a67e9663573f92 (patch)
tree96c789899a39b80ea1948deacddb967962f391c8 /pw.c
parenta8670ff9db64a02ff062892be733066bfef5955c (diff)
downloadpw-7ff253cfee19cb798096dd0193a67e9663573f92.tar.gz
pw-7ff253cfee19cb798096dd0193a67e9663573f92.tar.bz2
pw-7ff253cfee19cb798096dd0193a67e9663573f92.zip
Move batch command execution into function.
Diffstat (limited to 'pw.c')
-rw-r--r--pw.c37
1 files changed, 23 insertions, 14 deletions
diff --git a/pw.c b/pw.c
index 3f93fde..e878823 100644
--- a/pw.c
+++ b/pw.c
@@ -880,6 +880,26 @@ static execode execute(pwstate *pw, const char *cmd, char *resbuf,
return res;
}
+static execode batchexe(pwstate *pw, const char *cmd, char *resbuf, size_t size)
+{
+ size_t ndigits = strspn(cmd, "0123456789");
+ int count = 0;
+
+ if (ndigits > 3) {
+ snprintf(resbuf, size, "command count out of 0-999 range");
+ return exec_failed;
+ } else if (ndigits) {
+ (void) sscanf(cmd, "%3d", &count);
+ cmd += ndigits;
+ }
+ switch (cmd[0]) {
+ case ':': case '?': case '/':
+ return execute(pw, cmd, resbuf, size, count);
+ }
+ snprintf(resbuf, size, "missing command prefix [:/?]");
+ return exec_failed;
+}
+
static void ttyset(int fd, struct termios *tty)
{
if (tcsetattr(fd, TCSANOW, tty) < 0)
@@ -1097,21 +1117,10 @@ int main(int argc, char **argv)
break;
case 'e':
{
- size_t ndigits = strspn(optarg, "0123456789");
- int count = 0;
- const char *cmd = optarg;
-
- if (ndigits > 3) {
- error("-%c option %s: command count out of 0-999 range\n",
- opt, optarg);
- break;
- } else if (ndigits) {
- (void) sscanf(cmd, "%3d", &count);
- cmd += ndigits;
+ if (batchexe(&pw, optarg, pw.cmdbuf, cmdsize) == exec_failed) {
+ error("-%c option: %s: %s\n", opt, optarg, pw.cmdbuf);
+ return EXIT_FAILURE;
}
-
- if (execute(&pw, cmd, pw.cmdbuf, cmdsize, count) == exec_failed) {
- error("-%c option %s: %s\n", opt, optarg, pw.cmdbuf);
return EXIT_FAILURE;
}
}