[PATCH] termios: Replace rtems_termios_isig_status_code
Joel Sherrill
joel at rtems.org
Thu May 7 13:03:31 UTC 2020
This looks OK. Everything is still public enough where a user application
can register their own <ctl>-C catching function at that level.
Thanks for doing this.
--joel
On Thu, May 7, 2020 at 1:52 AM Sebastian Huber <
sebastian.huber at embedded-brains.de> wrote:
> Merge the rtems_termios_isig_status_code and
> rtems_termios_iproc_status_code enums into a single
> rtems_termios_iproc_status_code which is now a part of the API.
>
> Simplify rtems_termios_posix_isig_handler() to avoid unreachable code.
>
> Close #3800.
> ---
> cpukit/include/rtems/libio.h | 47
> +++++++++++++---------
> cpukit/libcsupport/src/termios.c | 34 ++--------------
> .../libcsupport/src/termios_posix_isig_handler.c | 18 ++++-----
> 3 files changed, 40 insertions(+), 59 deletions(-)
>
> diff --git a/cpukit/include/rtems/libio.h b/cpukit/include/rtems/libio.h
> index b3c0e975cd..f1c9eea51b 100644
> --- a/cpukit/include/rtems/libio.h
> +++ b/cpukit/include/rtems/libio.h
> @@ -1904,28 +1904,37 @@ rtems_status_code rtems_termios_bufsize (
> );
>
> /**
> - * @brief Type returned by all input processing (isig) methods
> - */
> + * @brief The status code returned by all Termios input processing (iproc)
> + * functions and input signal (isig) handlers.
> + */
> typedef enum {
> /**
> - * This indicates that the input character was processed
> - * and possibly placed into the buffer.
> + * @brief This status indicates that the input processing can continue.
> + *
> + * Input signal handlers shall return this status if no signal was
> raised and
> + * the input processing can continue.
> */
> - RTEMS_TERMIOS_ISIG_WAS_PROCESSED,
> + RTEMS_TERMIOS_IPROC_CONTINUE,
> +
> /**
> - * This indicates that the input character was not processed and
> - * subsequent processing is required.
> + * @brief This status indicates that the input processing should stop
> due to
> + * a signal.
> + *
> + * This indicates that the character was processed and determined to be
> one
> + * that requires a signal to be raised (e.g. VINTR or VKILL). The tty
> must
> + * be in the right Termios mode for this to occur. There is no further
> + * processing of this character required and the pending read()
> operation
> + * should be interrupted.
> */
> - RTEMS_TERMIOS_ISIG_WAS_NOT_PROCESSED,
> + RTEMS_TERMIOS_IPROC_INTERRUPT,
> +
> /**
> - * This indicates that the character was processed and determined
> - * to be one that requires a signal to be raised (e.g. VINTR or
> - * VKILL). The tty must be in the right termios mode for this to
> - * occur. There is no further processing of this character required and
> - * the pending read() operation should be interrupted.
> + * @brief This status indicates that the input processing is done.
> + *
> + * This status shall not be returned by input processing signal
> handlers.
> */
> - RTEMS_TERMIOS_ISIG_INTERRUPT_READ
> -} rtems_termios_isig_status_code;
> + RTEMS_TERMIOS_IPROC_DONE
> +} rtems_termios_iproc_status_code;
>
> /**
> * @brief Type for ISIG (VINTR/VKILL) handler
> @@ -1941,9 +1950,9 @@ typedef enum {
> * @param tty termios structure pointer for this input tty
> *
> * @return The value returned is according to that documented
> - * for @ref rtems_termios_isig_status_code.
> + * for @ref rtems_termios_iproc_status_code.
> */
> -typedef rtems_termios_isig_status_code (*rtems_termios_isig_handler)(
> +typedef rtems_termios_iproc_status_code (*rtems_termios_isig_handler)(
> unsigned char c,
> struct rtems_termios_tty *tty
> );
> @@ -1966,7 +1975,7 @@ typedef rtems_termios_isig_status_code
> (*rtems_termios_isig_handler)(
> * @return The value returned is according to that documented
> * for all methods adhering to @ref rtems_termios_isig_handler.
> */
> -rtems_termios_isig_status_code rtems_termios_default_isig_handler(
> +rtems_termios_iproc_status_code rtems_termios_default_isig_handler(
> unsigned char c,
> struct rtems_termios_tty *tty
> );
> @@ -1984,7 +1993,7 @@ rtems_termios_isig_status_code
> rtems_termios_default_isig_handler(
> * @return The value returned is according to that documented
> * for all methods adhering to @ref rtems_termios_isig_handler.
> */
> -rtems_termios_isig_status_code rtems_termios_posix_isig_handler(
> +rtems_termios_iproc_status_code rtems_termios_posix_isig_handler(
> unsigned char c,
> struct rtems_termios_tty *tty
> );
> diff --git a/cpukit/libcsupport/src/termios.c
> b/cpukit/libcsupport/src/termios.c
> index 3690ee3fc3..75925cf8ec 100644
> --- a/cpukit/libcsupport/src/termios.c
> +++ b/cpukit/libcsupport/src/termios.c
> @@ -1311,12 +1311,12 @@ static rtems_termios_isig_handler
> termios_isig_handler =
> * This is the default method to process VKILL or VQUIT characters if
> * ISIG processing is enabled. Note that it does nothing.
> */
> -rtems_termios_isig_status_code rtems_termios_default_isig_handler(
> +rtems_termios_iproc_status_code rtems_termios_default_isig_handler(
> unsigned char c,
> struct rtems_termios_tty *tty
> )
> {
> - return RTEMS_TERMIOS_ISIG_WAS_NOT_PROCESSED;
> + return RTEMS_TERMIOS_IPROC_CONTINUE;
> }
>
> /*
> @@ -1335,28 +1335,6 @@ rtems_status_code
> rtems_termios_register_isig_handler(
> return RTEMS_SUCCESSFUL;
> }
>
> -/**
> - * @brief Type returned by all input processing (iproc) methods
> - */
> -typedef enum {
> - /**
> - * This indicates that the input processing can continue.
> - */
> - RTEMS_TERMIOS_IPROC_CONTINUE,
> - /**
> - * This indicates that the input processing is done.
> - */
> - RTEMS_TERMIOS_IPROC_DONE,
> - /**
> - * This indicates that the character was processed and determined
> - * to be one that requires a signal to be raised (e.g. VINTR or
> - * VKILL). The tty must be in the right termios mode for this to
> - * occur. There is no further processing of this character required and
> - * the pending read() operation should be interrupted.
> - */
> - RTEMS_TERMIOS_IPROC_INTERRUPT
> -} rtems_termios_iproc_status_code;
> -
> /*
> * Process a single input character
> */
> @@ -1369,13 +1347,7 @@ iproc (unsigned char c, struct rtems_termios_tty
> *tty)
> */
> if ((tty->termios.c_lflag & ISIG)) {
> if ((c == tty->termios.c_cc[VINTR]) || (c ==
> tty->termios.c_cc[VQUIT])) {
> - rtems_termios_isig_status_code rc;
> - rc = (*termios_isig_handler)(c, tty);
> - if (rc == RTEMS_TERMIOS_ISIG_INTERRUPT_READ) {
> - return RTEMS_TERMIOS_IPROC_INTERRUPT;
> - }
> -
> - return RTEMS_TERMIOS_IPROC_CONTINUE;
> + return (*termios_isig_handler)(c, tty);
> }
> }
>
> diff --git a/cpukit/libcsupport/src/termios_posix_isig_handler.c
> b/cpukit/libcsupport/src/termios_posix_isig_handler.c
> index 5be2d10aa2..5f505fecb4 100644
> --- a/cpukit/libcsupport/src/termios_posix_isig_handler.c
> +++ b/cpukit/libcsupport/src/termios_posix_isig_handler.c
> @@ -20,20 +20,20 @@
>
> #include <signal.h>
>
> -rtems_termios_isig_status_code rtems_termios_posix_isig_handler(
> +rtems_termios_iproc_status_code rtems_termios_posix_isig_handler(
> unsigned char c,
> struct rtems_termios_tty *tty
> )
> {
> - if (c == tty->termios.c_cc[VINTR]) {
> - raise(SIGINT);
> - return RTEMS_TERMIOS_ISIG_INTERRUPT_READ;
> - }
> + int sig;
>
> - if (c == tty->termios.c_cc[VQUIT]) {
> - raise(SIGQUIT);
> - return RTEMS_TERMIOS_ISIG_INTERRUPT_READ;
> + if ( c == tty->termios.c_cc[ VQUIT ] ) {
> + sig = SIGQUIT;
> + } else {
> + sig = SIGINT;
> }
>
> - return RTEMS_TERMIOS_ISIG_WAS_NOT_PROCESSED;
> + (void) raise( sig );
> +
> + return RTEMS_TERMIOS_IPROC_INTERRUPT;
> }
> --
> 2.16.4
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20200507/1bde6534/attachment.html>
More information about the devel
mailing list