summaryrefslogtreecommitdiff
path: root/usr.bin/osh
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin/osh')
-rw-r--r--usr.bin/osh/osh.c57
1 files changed, 33 insertions, 24 deletions
diff --git a/usr.bin/osh/osh.c b/usr.bin/osh/osh.c
index f3a3a93..4064c12 100644
--- a/usr.bin/osh/osh.c
+++ b/usr.bin/osh/osh.c
@@ -55,6 +55,7 @@
"fetch - System information\n" \
"kfg - Start up kfgwm\n" \
"bell - Toggle backspace bell\n" \
+ "time - Get the current time\n" \
"exit - Exit the shell"
#define PROMPT "[root::osmora]~ "
@@ -65,37 +66,36 @@ static int running;
static int bell_fd;
static bool bs_bell = true; /* Beep on backspace */
-struct command {
+struct builtin_cmd {
const char *name;
- const char *path;
void (*func)(int argc, char *argv[]);
};
-void
+static void
cmd_help(int argc, char *argv[])
{
puts(HELP);
}
-void
+static void
cmd_exit(int argc, char *argv[])
{
running = 0;
}
-void
+static void
cmd_reboot(int argc, char *argv[])
{
cpu_reboot(REBOOT_RESET);
}
-void
+static void
cmd_shutdown(int argc, char *argv[])
{
cpu_reboot(REBOOT_POWEROFF | REBOOT_HALT);
}
-void
+static void
cmd_echo(int argc, char *argv[])
{
for (i = 1; i < argc; i++) {
@@ -105,7 +105,7 @@ cmd_echo(int argc, char *argv[])
putchar('\n');
}
-void
+static void
cmd_bell(int argc, char *argv[])
{
const char *usage_str = "usage: bell [on/off]";
@@ -126,7 +126,7 @@ cmd_bell(int argc, char *argv[])
}
}
-int
+static int
parse_args(char *input, char *argv[], int max_args)
{
int argc = 0;
@@ -207,28 +207,35 @@ getstr(void)
}
static void
-command_run(struct command *cmd, int argc, char *argv[])
+builtin_run(struct builtin_cmd *cmd, int argc, char *argv[])
{
if (cmd->func != NULL) {
cmd->func(argc, argv);
return;
}
+}
+
+static int
+cmd_run(const char *input, int argc, char *argv[])
+{
+ char bin_path[256];
+ int error;
- if (cmd->path != NULL) {
- spawn(cmd->path, SPAWN_WAIT);
+ snprintf(bin_path, sizeof(bin_path), "/usr/bin/%s", input);
+ if ((error = spawn(bin_path, SPAWN_WAIT)) < 0) {
+ return error;
}
+
+ return 0;
}
-struct command cmds[] = {
- {"help", NULL, cmd_help},
- {"echo", NULL, cmd_echo},
- {"exit", NULL, cmd_exit},
- {"reboot", NULL, cmd_reboot},
- {"shutdown", NULL, cmd_shutdown},
- {"bell", NULL, cmd_bell},
- {"kmsg", "/usr/bin/kmsg", NULL},
- {"fetch", "/usr/bin/fetch", NULL},
- {"kfg", "/usr/bin/kfgwm", NULL},
+struct builtin_cmd cmds[] = {
+ {"help",cmd_help},
+ {"echo",cmd_echo},
+ {"exit",cmd_exit},
+ {"reboot",cmd_reboot},
+ {"shutdown", cmd_shutdown},
+ {"bell", cmd_bell},
{NULL, NULL}
};
@@ -260,14 +267,16 @@ main(void)
for (i = 0; cmds[i].name != NULL; i++) {
if (strcmp(input, cmds[i].name) == 0) {
- command_run(&cmds[i], argc, argv);
+ builtin_run(&cmds[i], argc, argv);
found = 1;
break;
}
}
if (found == 0) {
- puts("Unrecognized command");
+ if (cmd_run(input, argc, argv) < 0) {
+ puts("Unrecognized command");
+ }
}
found = 0;