summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-11-18 10:03:24 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-11-20 10:30:25 +0100
commit7840b66f74005f3d6ddd590b9ab40945e1c1f827 (patch)
treeb97b898e4f40b1934a4a3b4518f08115aa28ba07
parentshell: Simplify rtems_shell_add_cmd_struct() (diff)
downloadrtems-7840b66f74005f3d6ddd590b9ab40945e1c1f827.tar.bz2
shell: Add initial commands and aliases only once
Make tables read-only.
-rw-r--r--cpukit/libmisc/shell/internal.h1
-rw-r--r--cpukit/libmisc/shell/shell.c22
-rw-r--r--cpukit/libmisc/shell/shell_cmdset.c17
-rw-r--r--cpukit/libmisc/shell/shellconfig.h8
4 files changed, 22 insertions, 26 deletions
diff --git a/cpukit/libmisc/shell/internal.h b/cpukit/libmisc/shell/internal.h
index cf999a8d9e..1884117824 100644
--- a/cpukit/libmisc/shell/internal.h
+++ b/cpukit/libmisc/shell/internal.h
@@ -27,7 +27,6 @@ rtems_shell_topic_t * rtems_shell_lookup_topic(const char *topic);
extern void rtems_shell_register_monitor_commands(void);
-extern void rtems_shell_initialize_command_set(void);
extern void rtems_shell_print_heap_info(
const char *c,
diff --git a/cpukit/libmisc/shell/shell.c b/cpukit/libmisc/shell/shell.c
index 9a5ffb55b4..6030eccbc6 100644
--- a/cpukit/libmisc/shell/shell.c
+++ b/cpukit/libmisc/shell/shell.c
@@ -112,6 +112,20 @@ static void rtems_shell_create_file(const char *name, const char *content)
}
}
+static void rtems_shell_init_commands(void)
+{
+ rtems_shell_cmd_t * const *c;
+ rtems_shell_alias_t * const *a;
+
+ for ( c = rtems_shell_Initial_commands ; *c ; c++ ) {
+ rtems_shell_add_cmd_struct( *c );
+ }
+
+ for ( a = rtems_shell_Initial_aliases ; *a ; a++ ) {
+ rtems_shell_alias_cmd( (*a)->name, (*a)->alias );
+ }
+}
+
static void rtems_shell_init_once(void)
{
struct passwd pwd;
@@ -131,6 +145,8 @@ static void rtems_shell_init_once(void)
"\n"
"Welcome to %v\n"
"running on %m\n");
+
+ rtems_shell_init_commands();
}
/*
@@ -706,11 +722,11 @@ bool rtems_shell_main_loop(
FILE *stdinToClose = NULL;
FILE *stdoutToClose = NULL;
- rtems_shell_initialize_command_set();
-
eno = pthread_once(&rtems_shell_once, rtems_shell_init_once);
assert(eno == 0);
+ rtems_shell_register_monitor_commands();
+
shell_env = rtems_shell_init_env(shell_env_arg);
if (shell_env == NULL) {
rtems_error(0, "rtems_shell_init_env");
@@ -790,8 +806,6 @@ bool rtems_shell_main_loop(
setvbuf(stdin,NULL,_IONBF,0); /* Not buffered*/
setvbuf(stdout,NULL,_IONBF,0); /* Not buffered*/
- rtems_shell_initialize_command_set();
-
/*
* Allocate the command line buffers.
*/
diff --git a/cpukit/libmisc/shell/shell_cmdset.c b/cpukit/libmisc/shell/shell_cmdset.c
index e291e7449c..2f2c246429 100644
--- a/cpukit/libmisc/shell/shell_cmdset.c
+++ b/cpukit/libmisc/shell/shell_cmdset.c
@@ -183,23 +183,6 @@ rtems_shell_cmd_t * rtems_shell_add_cmd(
return shell_cmd;
}
-
-void rtems_shell_initialize_command_set(void)
-{
- rtems_shell_cmd_t **c;
- rtems_shell_alias_t **a;
-
- for ( c = rtems_shell_Initial_commands ; *c ; c++ ) {
- rtems_shell_add_cmd_struct( *c );
- }
-
- for ( a = rtems_shell_Initial_aliases ; *a ; a++ ) {
- rtems_shell_alias_cmd( (*a)->name, (*a)->alias );
- }
-
- rtems_shell_register_monitor_commands();
-}
-
/* ----------------------------------------------- *
* you can make an alias for every command.
* ----------------------------------------------- */
diff --git a/cpukit/libmisc/shell/shellconfig.h b/cpukit/libmisc/shell/shellconfig.h
index d9d6078272..c5fced3513 100644
--- a/cpukit/libmisc/shell/shellconfig.h
+++ b/cpukit/libmisc/shell/shellconfig.h
@@ -90,7 +90,7 @@ extern rtems_shell_cmd_t rtems_shell_MALLOC_INFO_Command;
extern rtems_shell_cmd_t rtems_shell_PING_Command;
#endif
-extern rtems_shell_cmd_t *rtems_shell_Initial_commands[];
+extern rtems_shell_cmd_t * const rtems_shell_Initial_commands[];
/*
* Extern for alias commands
@@ -99,7 +99,7 @@ extern rtems_shell_alias_t rtems_shell_DIR_Alias;
extern rtems_shell_alias_t rtems_shell_CD_Alias;
extern rtems_shell_alias_t rtems_shell_EXIT_Alias;
-extern rtems_shell_alias_t *rtems_shell_Initial_aliases[];
+extern rtems_shell_alias_t * const rtems_shell_Initial_aliases[];
/*
* If we are configured to alias a command, then make sure the underlying
@@ -124,7 +124,7 @@ extern rtems_shell_alias_t *rtems_shell_Initial_aliases[];
#endif
#if defined(CONFIGURE_SHELL_COMMANDS_INIT)
- rtems_shell_alias_t *rtems_shell_Initial_aliases[] = {
+ rtems_shell_alias_t * const rtems_shell_Initial_aliases[] = {
#if (defined(CONFIGURE_SHELL_COMMANDS_ALL) && \
!defined(CONFIGURE_SHELL_NO_COMMAND_DIR)) || \
defined(CONFIGURE_SHELL_COMMAND_DIR)
@@ -150,7 +150,7 @@ extern rtems_shell_alias_t *rtems_shell_Initial_aliases[];
NULL
};
- rtems_shell_cmd_t *rtems_shell_Initial_commands[] = {
+ rtems_shell_cmd_t * const rtems_shell_Initial_commands[] = {
/*
* General comamnds that should be present
*/