shell: Add rtems_shell_run_main_loop()

In contrast to rtems_shell_main_loop(), this new function does not
perform all sorts of initialization based on environment settings.  For
example, due to the use of isatty() in rtems_shell_main_loop() it is
impossible to run an interactive shell through a socket connection.
This commit is contained in:
Sebastian Huber
2022-04-06 16:26:52 +02:00
parent a800e4de12
commit 23426257c6
2 changed files with 50 additions and 0 deletions
+25
View File
@@ -254,6 +254,31 @@ bool rtems_shell_main_loop(
rtems_shell_env_t *rtems_shell_env
);
/**
* @brief Runs the shell main loop.
*
* The caller shall initialize the shell environment. It is recommended that
* the caller duplicates the current shell environment using
* rtems_shell_dup_current_env() and then performs the required customization.
* Shell commands will use the stdin, stdout, and stderr file streams set up by
* the caller.
*
* @param interactive indicates if the shell main loop interfaces with an
* interactive user. For an interactive user, a welcome message using
* "/etc/motd" is presented and command prompt is displayed.
*
* @param[in, out] line_editor_output is the optional line editor output file
* stream. It may be NULL, to disable the line editor output.
*
* @return Returns true, if no error occurred and a shell exit was requested,
* otherwise false.
*/
bool rtems_shell_run_main_loop(
rtems_shell_env_t *shell_env,
bool interactive,
FILE *line_editor_output
);
extern const rtems_shell_env_t rtems_global_shell_env;
rtems_shell_env_t *rtems_shell_get_current_env(void);
+25
View File
@@ -1010,6 +1010,31 @@ static bool shell_main_loop(
return result;
}
bool rtems_shell_run_main_loop(
rtems_shell_env_t *shell_env,
bool interactive,
FILE *line_editor_output
)
{
bool result;
if (shell_env->magic != SHELL_MAGIC) {
return false;
}
if (!rtems_shell_init_user_env()) {
return false;
}
if (!rtems_shell_set_shell_env(shell_env)) {
return false;
}
result = shell_main_loop(shell_env, interactive, line_editor_output);
rtems_shell_clear_shell_env();
return result;
}
bool rtems_shell_main_loop(
rtems_shell_env_t *shell_env
)