shell: return exit codes
This commit is contained in:
parent
a7504ad99c
commit
2942340b21
12 changed files with 169 additions and 118 deletions
|
@ -5,7 +5,7 @@ struct console;
|
|||
struct cmd {
|
||||
const char *cmd;
|
||||
const char *desc;
|
||||
void (* exec)(struct console *con, size_t argc, const char **argv);
|
||||
int (* exec)(struct console *con, size_t argc, const char **argv);
|
||||
};
|
||||
|
||||
struct shell {
|
||||
|
@ -18,14 +18,14 @@ struct shell {
|
|||
size_t count_args(const char *line);
|
||||
char **parse_args(const char *line, size_t *argc);
|
||||
|
||||
void cmd_exec(struct cmd *cmds, struct console *con, size_t argc,
|
||||
int cmd_exec(struct cmd *cmds, struct console *con, size_t argc,
|
||||
const char **argv);
|
||||
void cmd_parse(struct cmd *cmds, struct console *con, const char *line);
|
||||
int cmd_parse(struct cmd *cmds, struct console *con, const char *line);
|
||||
|
||||
int shell_init(struct shell *shell, struct cmd *cmds,
|
||||
struct console *con, const char *prompt);
|
||||
int shell_parse(struct shell *shell);
|
||||
|
||||
void do_flash_cmd(struct console *con, size_t argc, const char **argv);
|
||||
void do_ftl_cmd(struct console *con, size_t argc, const char **argv);
|
||||
void do_mufs_cmd(struct console *con, size_t argc, const char **argv);
|
||||
int do_flash_cmd(struct console *con, size_t argc, const char **argv);
|
||||
int do_ftl_cmd(struct console *con, size_t argc, const char **argv);
|
||||
int do_mufs_cmd(struct console *con, size_t argc, const char **argv);
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
#pragma once
|
||||
|
||||
void shell_echo(struct console *con, size_t argc, const char **argv);
|
||||
int shell_echo(struct console *con, size_t argc, const char **argv);
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
#pragma once
|
||||
|
||||
void shell_mount(struct console *con, size_t argc, const char **argv);
|
||||
void shell_unmount(struct console *con, size_t argc, const char **argv);
|
||||
void shell_format(struct console *con, size_t argc, const char **argv);
|
||||
void shell_mkdir(struct console *con, size_t argc, const char **argv);
|
||||
void shell_rmdir(struct console *con, size_t argc, const char **argv);
|
||||
void shell_stat(struct console *con, size_t argc, const char **argv);
|
||||
void shell_cat(struct console *con, size_t argc, const char **argv);
|
||||
void shell_write(struct console *con, size_t argc, const char **argv);
|
||||
void shell_append(struct console *con, size_t argc, const char **argv);
|
||||
void shell_mv(struct console *con, size_t argc, const char **argv);
|
||||
void shell_rm(struct console *con, size_t argc, const char **argv);
|
||||
void shell_ls(struct console *con, size_t argc, const char **argv);
|
||||
int shell_mount(struct console *con, size_t argc, const char **argv);
|
||||
int shell_unmount(struct console *con, size_t argc, const char **argv);
|
||||
int shell_format(struct console *con, size_t argc, const char **argv);
|
||||
int shell_mkdir(struct console *con, size_t argc, const char **argv);
|
||||
int shell_rmdir(struct console *con, size_t argc, const char **argv);
|
||||
int shell_stat(struct console *con, size_t argc, const char **argv);
|
||||
int shell_cat(struct console *con, size_t argc, const char **argv);
|
||||
int shell_write(struct console *con, size_t argc, const char **argv);
|
||||
int shell_append(struct console *con, size_t argc, const char **argv);
|
||||
int shell_mv(struct console *con, size_t argc, const char **argv);
|
||||
int shell_rm(struct console *con, size_t argc, const char **argv);
|
||||
int shell_ls(struct console *con, size_t argc, const char **argv);
|
||||
|
|
|
@ -2,6 +2,6 @@
|
|||
|
||||
struct console;
|
||||
|
||||
void shell_date(struct console *con, size_t argc, const char **argv);
|
||||
void shell_time(struct console *con, size_t argc, const char **argv);
|
||||
void shell_set_date(struct console *con, size_t argc, const char **argv);
|
||||
int shell_date(struct console *con, size_t argc, const char **argv);
|
||||
int shell_time(struct console *con, size_t argc, const char **argv);
|
||||
int shell_set_date(struct console *con, size_t argc, const char **argv);
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
#pragma once
|
||||
|
||||
void shell_version(struct console *con, size_t argc, const char **argv);
|
||||
int shell_version(struct console *con, size_t argc, const char **argv);
|
||||
|
|
|
@ -5,32 +5,36 @@
|
|||
#include <console.h>
|
||||
#include <shell.h>
|
||||
|
||||
void cmd_exec(struct cmd *cmds, struct console *con, size_t argc,
|
||||
int cmd_exec(struct cmd *cmds, struct console *con, size_t argc,
|
||||
const char **argv)
|
||||
{
|
||||
struct cmd *cmd;
|
||||
|
||||
if (argc < 1)
|
||||
return;
|
||||
return -1;
|
||||
|
||||
for (cmd = cmds; cmd->cmd; ++cmd) {
|
||||
if (strcmp(cmd->cmd, argv[0]) == 0) {
|
||||
cmd->exec(con, argc - 1, argv + 1);
|
||||
break;
|
||||
return cmd->exec(con, argc - 1, argv + 1);
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
void cmd_parse(struct cmd *cmds, struct console *con, const char *line)
|
||||
int cmd_parse(struct cmd *cmds, struct console *con, const char *line)
|
||||
{
|
||||
char **argv;
|
||||
size_t argc;
|
||||
int ret;
|
||||
|
||||
if (!(argv = parse_args(line, &argc)))
|
||||
return;
|
||||
return -1;
|
||||
|
||||
cmd_exec(cmds, con, argc, (const char **)argv);
|
||||
ret = cmd_exec(cmds, con, argc, (const char **)argv);
|
||||
free(argv);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int shell_init(struct shell *shell, struct cmd *cmds,
|
||||
|
|
|
@ -4,12 +4,14 @@
|
|||
|
||||
#include <shell/echo.h>
|
||||
|
||||
void shell_echo(struct console *con, size_t argc, const char **argv)
|
||||
int shell_echo(struct console *con, size_t argc, const char **argv)
|
||||
{
|
||||
if (argc < 1)
|
||||
return;
|
||||
return -1;
|
||||
|
||||
fprintf(con->fp, "%s\n", argv[0]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@ static void print_hex_ascii(FILE *fp, uint32_t offset, const char *buf, size_t l
|
|||
}
|
||||
}
|
||||
|
||||
static void do_flash_probe(struct console *con, size_t argc, const char **argv)
|
||||
static int do_flash_probe(struct console *con, size_t argc, const char **argv)
|
||||
{
|
||||
(void)argv;
|
||||
(void)argc;
|
||||
|
@ -71,25 +71,29 @@ static void do_flash_probe(struct console *con, size_t argc, const char **argv)
|
|||
|
||||
if (!(flash = flash_probe())) {
|
||||
fprintf(con->fp, "error: unable to probe the flash device.\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void do_flash_release(struct console *con, size_t argc, const char **argv)
|
||||
static int do_flash_release(struct console *con, size_t argc, const char **argv)
|
||||
{
|
||||
(void)argv;
|
||||
(void)argc;
|
||||
|
||||
if (!flash) {
|
||||
fprintf(con->fp, "no flash device currently active.\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
flash_release(flash);
|
||||
flash = NULL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void do_flash_info(struct console *con, size_t argc, const char **argv)
|
||||
static int do_flash_info(struct console *con, size_t argc, const char **argv)
|
||||
{
|
||||
size_t size, capacity;
|
||||
|
||||
|
@ -98,7 +102,7 @@ static void do_flash_info(struct console *con, size_t argc, const char **argv)
|
|||
|
||||
if (!flash) {
|
||||
fprintf(con->fp, "error: no flash device probed.\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
size = flash_get_size(flash);
|
||||
|
@ -106,39 +110,41 @@ static void do_flash_info(struct console *con, size_t argc, const char **argv)
|
|||
|
||||
fprintf(con->fp, " size: %" PRSZu "/%" PRSZu " bytes (%" PRSZu "%% usage)\n",
|
||||
size, capacity, 100 * size / capacity);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void do_flash_read(struct console *con, size_t argc, const char **argv)
|
||||
static int do_flash_read(struct console *con, size_t argc, const char **argv)
|
||||
{
|
||||
char buf[256];
|
||||
size_t addr, len, nbytes;
|
||||
|
||||
if (argc < 2) {
|
||||
fprintf(con->fp, "usage: flash read <addr> <len>\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!flash) {
|
||||
fprintf(con->fp, "error: no flash device probed.\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
addr = strtoull(argv[0], NULL, 16);
|
||||
|
||||
if (errno == EINVAL || errno == ERANGE) {
|
||||
fprintf(con->fp, "error: expected hexadecimal value for addr\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
len = strtoull(argv[1], NULL, 16);
|
||||
|
||||
if (errno == EINVAL || errno == ERANGE) {
|
||||
fprintf(con->fp, "error: expected hexadecimal value for len\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!len)
|
||||
return;
|
||||
return 0;
|
||||
|
||||
while (len) {
|
||||
nbytes = min(len, 256);
|
||||
|
@ -148,39 +154,41 @@ static void do_flash_read(struct console *con, size_t argc, const char **argv)
|
|||
addr += nbytes;
|
||||
len -= nbytes;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void do_flash_write(struct console *con, size_t argc, const char **argv)
|
||||
static int do_flash_write(struct console *con, size_t argc, const char **argv)
|
||||
{
|
||||
char buf[256];
|
||||
size_t addr, len, nbytes;
|
||||
|
||||
if (argc < 2) {
|
||||
fprintf(con->fp, "usage: flash write <addr> <len>\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!flash) {
|
||||
fprintf(con->fp, "error: no flash device probed.\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
addr = strtoull(argv[0], NULL, 16);
|
||||
|
||||
if (errno == EINVAL || errno == ERANGE) {
|
||||
fprintf(con->fp, "error: expected hexadecimal value for addr\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
len = strtoull(argv[1], NULL, 16);
|
||||
|
||||
if (errno == EINVAL || errno == ERANGE) {
|
||||
fprintf(con->fp, "error: expected hexadecimal value for len\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!len)
|
||||
return;
|
||||
return 0;
|
||||
|
||||
while (len) {
|
||||
nbytes = min(len, 256);
|
||||
|
@ -195,40 +203,44 @@ static void do_flash_write(struct console *con, size_t argc, const char **argv)
|
|||
}
|
||||
|
||||
flash_sync(flash);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void do_flash_erase(struct console *con, size_t argc, const char **argv)
|
||||
static int do_flash_erase(struct console *con, size_t argc, const char **argv)
|
||||
{
|
||||
size_t addr, len;
|
||||
|
||||
if (argc < 2) {
|
||||
fprintf(con->fp, "usage: flash erase <addr> <len>\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!flash) {
|
||||
fprintf(con->fp, "error: no flash device probed.\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
addr = strtoull(argv[0], NULL, 16);
|
||||
|
||||
if (errno == EINVAL || errno == ERANGE) {
|
||||
fprintf(con->fp, "error: expected hexadecimal value for addr\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
len = strtoull(argv[1], NULL, 16);
|
||||
|
||||
if (errno == EINVAL || errno == ERANGE) {
|
||||
fprintf(con->fp, "error: expected hexadecimal value for len\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!len)
|
||||
return;
|
||||
return 0;
|
||||
|
||||
flash_erase(flash, addr, len);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct cmd flash_cmds[] = {
|
||||
|
@ -241,12 +253,12 @@ static struct cmd flash_cmds[] = {
|
|||
{ NULL, NULL, NULL },
|
||||
};
|
||||
|
||||
void do_flash_cmd(struct console *con, size_t argc, const char **argv)
|
||||
int do_flash_cmd(struct console *con, size_t argc, const char **argv)
|
||||
{
|
||||
if (argc < 1) {
|
||||
fprintf(con->fp, "usage: flash <command>\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
cmd_exec(flash_cmds, con, argc, argv);
|
||||
return cmd_exec(flash_cmds, con, argc, argv);
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
|
||||
extern struct flash_dev *flash;
|
||||
|
||||
static void do_ftl_probe(struct console *con, size_t argc, const char **argv)
|
||||
static int do_ftl_probe(struct console *con, size_t argc, const char **argv)
|
||||
{
|
||||
(void)argv;
|
||||
(void)argc;
|
||||
|
@ -27,13 +27,15 @@ static void do_ftl_probe(struct console *con, size_t argc, const char **argv)
|
|||
|
||||
if (!(flash = flash_probe())) {
|
||||
fprintf(con->fp, "error: unable to probe the flash device.\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!(flash = ftl_mount(flash))) {
|
||||
fprintf(con->fp, "error: unable to mount the flash translation layer.\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct cmd ftl_cmds[] = {
|
||||
|
@ -41,12 +43,12 @@ static struct cmd ftl_cmds[] = {
|
|||
{ NULL, NULL, NULL },
|
||||
};
|
||||
|
||||
void do_ftl_cmd(struct console *con, size_t argc, const char **argv)
|
||||
int do_ftl_cmd(struct console *con, size_t argc, const char **argv)
|
||||
{
|
||||
if (argc < 1) {
|
||||
fprintf(con->fp, "usage: flash <command>\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
cmd_exec(ftl_cmds, con, argc, argv);
|
||||
return cmd_exec(ftl_cmds, con, argc, argv);
|
||||
}
|
||||
|
|
|
@ -20,14 +20,14 @@
|
|||
extern struct flash_dev *flash;
|
||||
struct mufs *mufs = NULL;
|
||||
|
||||
void shell_mount(struct console *con, size_t argc, const char **argv)
|
||||
int shell_mount(struct console *con, size_t argc, const char **argv)
|
||||
{
|
||||
(void)argc;
|
||||
(void)argv;
|
||||
|
||||
if (!flash) {
|
||||
fprintf(con->fp, "error: no flash device probed.\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (mufs) {
|
||||
|
@ -37,20 +37,22 @@ void shell_mount(struct console *con, size_t argc, const char **argv)
|
|||
|
||||
if (!(mufs = mufs_mount(flash))) {
|
||||
fprintf(con->fp, "error: unable to mount the filesystem.\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
flash = NULL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void shell_unmount(struct console *con, size_t argc, const char **argv)
|
||||
int shell_unmount(struct console *con, size_t argc, const char **argv)
|
||||
{
|
||||
(void)argc;
|
||||
(void)argv;
|
||||
|
||||
if (!mufs) {
|
||||
fprintf(con->fp, "no mufs filesystem currently active\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (flash)
|
||||
|
@ -61,106 +63,116 @@ void shell_unmount(struct console *con, size_t argc, const char **argv)
|
|||
|
||||
mufs_unmount(mufs);
|
||||
mufs = NULL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void shell_format(struct console *con, size_t argc, const char **argv)
|
||||
int shell_format(struct console *con, size_t argc, const char **argv)
|
||||
{
|
||||
(void)argc;
|
||||
(void)argv;
|
||||
|
||||
if (!flash) {
|
||||
fprintf(con->fp, "error: no flash device probed.\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (mufs_format(flash) < 0) {
|
||||
fprintf(con->fp, "error: unable to format the flash device.\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void shell_mkdir(struct console *con, size_t argc, const char **argv)
|
||||
int shell_mkdir(struct console *con, size_t argc, const char **argv)
|
||||
{
|
||||
if (argc < 1) {
|
||||
fprintf(con->fp, "usage: mufs mkdir <path>\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!mufs) {
|
||||
fprintf(con->fp, "error: no file system mounted.\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (mufs_mkdir(mufs, argv[0]) < 0) {
|
||||
fprintf(con->fp, "error: unable to create the directory\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void shell_rmdir(struct console *con, size_t argc, const char **argv)
|
||||
int shell_rmdir(struct console *con, size_t argc, const char **argv)
|
||||
{
|
||||
if (argc < 1) {
|
||||
fprintf(con->fp, "usage: mufs rmdir <path>\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!mufs) {
|
||||
fprintf(con->fp, "error: no file system mounted.\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (mufs_rmdir(mufs, argv[0]) < 0) {
|
||||
fprintf(con->fp, "error: unable to remove the directory\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void shell_stat(struct console *con, size_t argc, const char **argv)
|
||||
int shell_stat(struct console *con, size_t argc, const char **argv)
|
||||
{
|
||||
struct mufs_stat stat;
|
||||
|
||||
if (argc < 1) {
|
||||
fprintf(con->fp, "usage: mufs stat <path>\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!mufs) {
|
||||
fprintf(con->fp, "error: no file system mounted.\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (mufs_stat(mufs, argv[0], &stat) < 0) {
|
||||
fprintf(con->fp, "error: unable to stat the file\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
switch (stat.type) {
|
||||
case MUFS_DIR: printf(" type: directory\n"); break;
|
||||
case MUFS_FILE: printf(" type: file\n"); break;
|
||||
default: return;
|
||||
default: return -1;
|
||||
}
|
||||
|
||||
printf(" file size: %" PRIu32 " bytes\n", stat.file_size);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void shell_cat(struct console *con, size_t argc, const char **argv)
|
||||
int shell_cat(struct console *con, size_t argc, const char **argv)
|
||||
{
|
||||
char data[256];
|
||||
struct mufs_file *file;
|
||||
|
||||
if (argc < 1) {
|
||||
fprintf(con->fp, "usage: mufs cat <path>\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!mufs) {
|
||||
fprintf(con->fp, "error: no file system mounted.\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!(file = mufs_open(mufs, argv[0], MUFS_READ))) {
|
||||
fprintf(con->fp, "error: unable to open the file\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
while (mufs_read(file, data, sizeof data) != 0) {
|
||||
|
@ -168,9 +180,11 @@ void shell_cat(struct console *con, size_t argc, const char **argv)
|
|||
}
|
||||
|
||||
mufs_close(file);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void shell_write(struct console *con, size_t argc, const char **argv)
|
||||
int shell_write(struct console *con, size_t argc, const char **argv)
|
||||
{
|
||||
char data[256];
|
||||
struct mufs_file *file;
|
||||
|
@ -178,17 +192,17 @@ void shell_write(struct console *con, size_t argc, const char **argv)
|
|||
|
||||
if (argc < 1) {
|
||||
fprintf(con->fp, "usage: mufs write <path>\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!mufs) {
|
||||
fprintf(con->fp, "error: no file system mounted.\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!(file = mufs_open(mufs, argv[0], MUFS_WRITE))) {
|
||||
fprintf(con->fp, "error: unable to open the file\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
fprintf(con->fp, "> ");
|
||||
|
@ -199,9 +213,11 @@ void shell_write(struct console *con, size_t argc, const char **argv)
|
|||
}
|
||||
|
||||
mufs_close(file);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void shell_append(struct console *con, size_t argc, const char **argv)
|
||||
int shell_append(struct console *con, size_t argc, const char **argv)
|
||||
{
|
||||
struct mufs_file *file;
|
||||
char data[256];
|
||||
|
@ -209,17 +225,17 @@ void shell_append(struct console *con, size_t argc, const char **argv)
|
|||
|
||||
if (argc < 2) {
|
||||
fprintf(con->fp, "usage: mufs append <path> <line>\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!mufs) {
|
||||
fprintf(con->fp, "error: no file system mounted.\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!(file = mufs_open(mufs, argv[0], MUFS_WRITE | MUFS_APPEND))) {
|
||||
fprintf(con->fp, "error: unable to open the file\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
n = strlen(argv[1]);
|
||||
|
@ -230,45 +246,51 @@ void shell_append(struct console *con, size_t argc, const char **argv)
|
|||
|
||||
mufs_write(file, data, n + 1);
|
||||
mufs_close(file);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void shell_mv(struct console *con, size_t argc, const char **argv)
|
||||
int shell_mv(struct console *con, size_t argc, const char **argv)
|
||||
{
|
||||
if (argc < 2) {
|
||||
fprintf(con->fp, "usage: mufs mv <old> <new>\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!mufs) {
|
||||
fprintf(con->fp, "error: no file system mounted.\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (mufs_rename(mufs, argv[0], argv[1]) < 0) {
|
||||
fprintf(con->fp, "error: unable to move the file\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void shell_rm(struct console *con, size_t argc, const char **argv)
|
||||
int shell_rm(struct console *con, size_t argc, const char **argv)
|
||||
{
|
||||
if (argc < 1) {
|
||||
fprintf(con->fp, "usage: mufs rm <path>\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!mufs) {
|
||||
fprintf(con->fp, "error: no file system mounted.\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (mufs_unlink(mufs, argv[0]) < 0) {
|
||||
fprintf(con->fp, "error: unable to remove the file\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void shell_ls(struct console *con, size_t argc, const char **argv)
|
||||
int shell_ls(struct console *con, size_t argc, const char **argv)
|
||||
{
|
||||
struct mufs_dirent ent;
|
||||
struct mufs_dir *dir;
|
||||
|
@ -280,12 +302,12 @@ void shell_ls(struct console *con, size_t argc, const char **argv)
|
|||
|
||||
if (!mufs) {
|
||||
fprintf(con->fp, "error: no file system mounted.\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!(dir = mufs_opendir(mufs, path))) {
|
||||
fprintf(con->fp, "error: unable to open the directory\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
while (mufs_readdir(dir, &ent) == 0) {
|
||||
|
@ -293,6 +315,7 @@ void shell_ls(struct console *con, size_t argc, const char **argv)
|
|||
}
|
||||
|
||||
mufs_closedir(dir);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct cmd mufs_cmds[] = {
|
||||
|
@ -311,7 +334,7 @@ static struct cmd mufs_cmds[] = {
|
|||
{ NULL, NULL, NULL },
|
||||
};
|
||||
|
||||
void do_mufs_cmd(struct console *con, size_t argc, const char **argv)
|
||||
int do_mufs_cmd(struct console *con, size_t argc, const char **argv)
|
||||
{
|
||||
cmd_exec(mufs_cmds, con, argc, argv);
|
||||
return cmd_exec(mufs_cmds, con, argc, argv);
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
#include <shell/rtc.h>
|
||||
|
||||
void shell_date(struct console *con, size_t argc, const char **argv)
|
||||
int shell_date(struct console *con, size_t argc, const char **argv)
|
||||
{
|
||||
struct tm now;
|
||||
|
||||
|
@ -18,9 +18,11 @@ void shell_date(struct console *con, size_t argc, const char **argv)
|
|||
fprintf(con->fp, "%02d:%02d:%02d %02d-%02d-%d\n",
|
||||
now.tm_hour, now.tm_min, now.tm_sec,
|
||||
now.tm_mday, now.tm_mon + 1, now.tm_year + 1900);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void shell_time(struct console *con, size_t argc, const char **argv)
|
||||
int shell_time(struct console *con, size_t argc, const char **argv)
|
||||
{
|
||||
struct tm now;
|
||||
|
||||
|
@ -30,22 +32,24 @@ void shell_time(struct console *con, size_t argc, const char **argv)
|
|||
rtc_get_time(&now);
|
||||
|
||||
fprintf(con->fp, "%ld\n", mktime(&now));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void shell_set_date(struct console *con, size_t argc, const char **argv)
|
||||
int shell_set_date(struct console *con, size_t argc, const char **argv)
|
||||
{
|
||||
struct tm now;
|
||||
|
||||
if (argc < 2) {
|
||||
fprintf(con->fp, "usage: set-date <format> <date>\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
rtc_get_time(&now);
|
||||
|
||||
if (!strptime(argv[1], argv[0], &now)) {
|
||||
fprintf(con->fp, "error\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
rtc_init(&now);
|
||||
|
@ -53,4 +57,6 @@ void shell_set_date(struct console *con, size_t argc, const char **argv)
|
|||
fprintf(con->fp, "%02d:%02d:%02d %02d-%02d-%d\n",
|
||||
now.tm_hour, now.tm_min, now.tm_sec,
|
||||
now.tm_mday, now.tm_mon + 1, now.tm_year + 1900);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -4,12 +4,14 @@
|
|||
|
||||
#include <shell/version.h>
|
||||
|
||||
void shell_version(struct console *con, size_t argc, const char **argv)
|
||||
int shell_version(struct console *con, size_t argc, const char **argv)
|
||||
{
|
||||
(void)argv;
|
||||
|
||||
if (argc < 1)
|
||||
return;
|
||||
return -1;
|
||||
|
||||
fprintf(con->fp, "hello,%s\n", TBM_VERSION);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue