From 7f46de0a58437360598f01800e927fd93bfb03a3 Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Tue, 16 Oct 2018 16:13:06 -0400 Subject: [PATCH] fs_shell: Integrate btrfs_shell's command_cat into fs_shell itself. --- .../file_systems/btrfs/btrfs_shell/Jamfile | 3 +- .../btrfs/btrfs_shell/additional_commands.cpp | 19 ------ .../btrfs/btrfs_shell/command_cat.cpp | 61 ------------------- .../btrfs/btrfs_shell/command_cat.h | 17 ------ src/tools/fs_shell/fssh.cpp | 50 +++++++++++++++ 5 files changed, 51 insertions(+), 99 deletions(-) delete mode 100644 src/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/additional_commands.cpp delete mode 100644 src/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/command_cat.cpp delete mode 100644 src/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/command_cat.h diff --git a/src/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/Jamfile b/src/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/Jamfile index ff04a5d017..9ed34e1112 100644 --- a/src/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/Jamfile +++ b/src/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/Jamfile @@ -56,8 +56,7 @@ BuildPlatformMergeObject btrfs.o : $(btrfsSources) $(utilitySources) ; BuildPlatformMain btrfs_shell : - additional_commands.cpp - command_cat.cpp + # no extra files : btrfs.o fs_shell.a $(HOST_LIBSUPC++) $(HOST_LIBSTDC++) diff --git a/src/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/additional_commands.cpp b/src/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/additional_commands.cpp deleted file mode 100644 index 82a1f12a87..0000000000 --- a/src/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/additional_commands.cpp +++ /dev/null @@ -1,19 +0,0 @@ -#include "fssh.h" - -#include "command_cat.h" - - -namespace FSShell { - - -void -register_additional_commands() -{ - CommandManager::Default()->AddCommands( - command_cat, "cat", "concatenate file(s) to stdout", - NULL - ); -} - - -} // namespace FSShell diff --git a/src/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/command_cat.cpp b/src/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/command_cat.cpp deleted file mode 100644 index e1417a87dc..0000000000 --- a/src/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/command_cat.cpp +++ /dev/null @@ -1,61 +0,0 @@ -#include -#include - -#include "syscalls.h" -#include "system_dependencies.h" - - -namespace FSShell { - - -fssh_status_t -command_cat(int argc, const char* const* argv) -{ - long numBytes = 10; - int fileStart = 1; - if (argc < 2 || strcmp(argv[1], "--help") == 0) { - printf( - "Usage: %s [ -n ] [FILE]...\n" - "\t -n\tNumber of bytes to read\n", - argv[0] - ); - return FSSH_B_OK; - } - - if (argc > 3 && strcmp(argv[1], "-n") == 0) { - fileStart += 2; - numBytes = strtol(argv[2], NULL, 10); - } - - const char* const* files = argv + fileStart; - for (; *files; files++) { - const char* file = *files; - int fd = _kern_open(-1, file, O_RDONLY, O_RDONLY); - if (fd < 0) { - fssh_dprintf("Error: %s\n", fssh_strerror(fd)); - return FSSH_B_BAD_VALUE; - } - - char buffer[numBytes + 1]; - if (buffer == NULL) { - fssh_dprintf("Error: No memory\n"); - _kern_close(fd); - return FSSH_B_NO_MEMORY; - } - - if (_kern_read(fd, 0, buffer, numBytes) != numBytes) { - fssh_dprintf("Error: fail to read, length: %i\n", numBytes); - _kern_close(fd); - return FSSH_B_BAD_VALUE; - } - - _kern_close(fd); - buffer[numBytes] = '\0'; - printf("%s\n", buffer); - } - - return FSSH_B_OK; -} - - -} // namespace FSShell diff --git a/src/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/command_cat.h b/src/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/command_cat.h deleted file mode 100644 index a86fd78a25..0000000000 --- a/src/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/command_cat.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef COMMAND_CAT_H -#define COMMAND_CAT_H - - -#include "fssh_types.h" - - -namespace FSShell { - - -fssh_status_t command_cat(int argc, const char* const* argv); - - -} // namespace FSShell - - -#endif // COMMAND_CAT_H diff --git a/src/tools/fs_shell/fssh.cpp b/src/tools/fs_shell/fssh.cpp index bcff629a71..97fbb2e86e 100644 --- a/src/tools/fs_shell/fssh.cpp +++ b/src/tools/fs_shell/fssh.cpp @@ -25,6 +25,7 @@ #include "fssh_errno.h" #include "fssh_errors.h" #include "fssh_fs_info.h" +#include "fssh_fcntl.h" #include "fssh_module.h" #include "fssh_node_monitor.h" #include "fssh_stat.h" @@ -687,6 +688,54 @@ command_chmod(int argc, const char* const* argv) } +static fssh_status_t +command_cat(int argc, const char* const* argv) +{ + size_t numBytes = 10; + int fileStart = 1; + if (argc < 2 || strcmp(argv[1], "--help") == 0) { + printf("Usage: %s [ -n ] [FILE]...\n" + "\t -n\tNumber of bytes to read\n", + argv[0]); + return FSSH_B_OK; + } + + if (argc > 3 && strcmp(argv[1], "-n") == 0) { + fileStart += 2; + numBytes = strtol(argv[2], NULL, 10); + } + + const char* const* files = argv + fileStart; + for (; *files; files++) { + const char* file = *files; + int fd = _kern_open(-1, file, FSSH_O_RDONLY, FSSH_O_RDONLY); + if (fd < 0) { + fprintf(stderr, "error: %s\n", fssh_strerror(fd)); + return FSSH_B_BAD_VALUE; + } + + char buffer[numBytes + 1]; + if (buffer == NULL) { + fprintf(stderr, "error: No memory\n"); + _kern_close(fd); + return FSSH_B_NO_MEMORY; + } + + if (_kern_read(fd, 0, buffer, numBytes) != (ssize_t)numBytes) { + fprintf(stderr, "error reading: %s\n", fssh_strerror(fd)); + _kern_close(fd); + return FSSH_B_BAD_VALUE; + } + + _kern_close(fd); + buffer[numBytes] = '\0'; + printf("%s\n", buffer); + } + + return FSSH_B_OK; +} + + static fssh_status_t command_help(int argc, const char* const* argv) { @@ -1214,6 +1263,7 @@ register_commands() command_cd, "cd", "change current directory", command_chmod, "chmod", "change file permissions", command_cp, "cp", "copy files and directories", + command_cat, "cat", "concatenate file(s) to stdout", command_help, "help", "list supported commands", command_info, "info", "prints volume informations", command_ioctl, "ioctl", "ioctl() on root, for FS debugging only",