summaryrefslogtreecommitdiffstats
path: root/cpukit/libmisc/shell/main_cmdls.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-11-18 14:05:15 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-11-20 10:30:26 +0100
commit3fe5d01bc0d54465a6a05aab0d715855bbbc8009 (patch)
tree245fb018fd38c0ff3c3586386f2619f8e5d754f7 /cpukit/libmisc/shell/main_cmdls.c
parentshell: Fix help topic header (diff)
downloadrtems-3fe5d01bc0d54465a6a05aab0d715855bbbc8009.tar.bz2
shell: Add CMDLS, CMDCHOWN, CMDCHMOD commands
Diffstat (limited to 'cpukit/libmisc/shell/main_cmdls.c')
-rw-r--r--cpukit/libmisc/shell/main_cmdls.c91
1 files changed, 91 insertions, 0 deletions
diff --git a/cpukit/libmisc/shell/main_cmdls.c b/cpukit/libmisc/shell/main_cmdls.c
new file mode 100644
index 0000000000..f08925c3f3
--- /dev/null
+++ b/cpukit/libmisc/shell/main_cmdls.c
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2014 embedded brains GmbH. All rights reserved.
+ *
+ * embedded brains GmbH
+ * Dornierstr. 4
+ * 82178 Puchheim
+ * Germany
+ * <rtems@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+#if HAVE_CONFIG_H
+ #include "config.h"
+#endif
+
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <rtems/shellconfig.h>
+
+#include "internal.h"
+
+static void error(const char *s, int eno)
+{
+ printf("%s: %s\n", s, strerror(eno));
+}
+
+static void print_cmd(const rtems_shell_cmd_t *shell_cmd)
+{
+ if (rtems_shell_can_see_cmd(shell_cmd)) {
+ mode_t m = shell_cmd->mode;
+
+ printf(
+ "%c%c%c%c%c%c%c%c%c %5u %5u %s\n",
+ (m & S_IRUSR) != 0 ? 'r' : '-',
+ (m & S_IWUSR) != 0 ? 'w' : '-',
+ (m & S_IXUSR) != 0 ? 'x' : '-',
+ (m & S_IRGRP) != 0 ? 'r' : '-',
+ (m & S_IWGRP) != 0 ? 'w' : '-',
+ (m & S_IXGRP) != 0 ? 'x' : '-',
+ (m & S_IROTH) != 0 ? 'r' : '-',
+ (m & S_IWOTH) != 0 ? 'w' : '-',
+ (m & S_IXOTH) != 0 ? 'x' : '-',
+ (unsigned) shell_cmd->uid,
+ (unsigned) shell_cmd->gid,
+ shell_cmd->name
+ );
+ }
+}
+
+static int rtems_shell_main_cmdls(int argc, char **argv)
+{
+ const rtems_shell_cmd_t *shell_cmd;
+
+ if (argc <= 1) {
+ shell_cmd = rtems_shell_first_cmd;
+
+ while (shell_cmd != NULL) {
+ print_cmd(shell_cmd);
+
+ shell_cmd = shell_cmd->next;
+ }
+ } else {
+ int i;
+
+ for (i = 1; i < argc; ++i) {
+ const char *cmd = argv[i];
+
+ shell_cmd = rtems_shell_lookup_cmd(cmd);
+
+ if (shell_cmd != NULL) {
+ print_cmd(shell_cmd);
+ } else {
+ error(cmd, ENOENT);
+ }
+ }
+ }
+
+ return 0;
+}
+
+rtems_shell_cmd_t rtems_shell_CMDLS_Command = {
+ .name = "cmdls",
+ .usage = "cmdls COMMAND...",
+ .topic = "misc",
+ .command = rtems_shell_main_cmdls
+};