[PATCH 1/2] libc: Added implementations for sig2str/str2sig

Joel Sherrill joel.sherrill at gmail.com
Fri Jul 16 21:38:36 UTC 2021


On Wed, Jul 7, 2021 at 5:46 AM Matt Joyce <mfjoyce2004 at gmail.com> wrote:
>
> Added function implementations for sig2str() and str2sig() in libc/signal in order
> to improve POSIX compliance.
> ---
>  newlib/libc/signal/sig2str.c | 156 +++++++++++++++++++++++++++++++++++
>  1 file changed, 156 insertions(+)
>  create mode 100644 newlib/libc/signal/sig2str.c
>
> diff --git a/newlib/libc/signal/sig2str.c b/newlib/libc/signal/sig2str.c
> new file mode 100644
> index 000000000..a07fa2a38
> --- /dev/null
> +++ b/newlib/libc/signal/sig2str.c
> @@ -0,0 +1,156 @@
> +/* Placeholder  */

This must be fixed.

> +//#define __GNU_VISIBLE // defining it to have access to SIG2STR_MAX
> +
> +#include <signal.h>
> +#include <string.h>
> +#include <stdio.h>
> +
> +typedef struct sig_name_and_num {
> +  const char *sig_name;
> +  const int  sig_num;
> +} sig_name_and_num;
> +
> +static sig_name_and_num sig_array[] = {
> +    #ifdef EXIT
> +    { "EXIT", 0 },
> +    #endif

The {} part needs indenting

> +    #ifdef SIGHUP
> +    { "HUP", SIGHUP},
> +    #endif
> +    #ifdef SIGINT
> +    { "INT", SIGINT },
> +    #endif
> +    #ifdef SIGQUIT
> +    { "QUIT", SIGQUIT },
> +    #endif
> +    #ifdef SIGILL
> +    { "ILL", SIGILL },
> +    #endif
> +    #ifdef SIGTRAP
> +    { "TRAP", SIGTRAP },
> +    #endif
> +    #ifdef SIGABRT
> +    { "ABRT", SIGABRT },
> +    #endif
> +    #ifdef SIGIOT
> +    { "IOT", SIGIOT},
> +    #endif
> +    #ifdef SIGEMT
> +    { "EMT", SIGEMT },
> +    #endif
> +    #ifdef SIGFPE
> +    { "FPE", SIGFPE },
> +    #endif
> +    #ifdef SIGKILL
> +    { "KILL", SIGKILL },
> +    #endif
> +    #ifdef SIGBUS
> +    { "BUS", SIGBUS },
> +    #endif
> +    #ifdef SIGSEGV
> +    { "SEGV", SIGSEGV },
> +    #endif
> +    #ifdef SIGSYS
> +    { "SYS", SIGSYS },
> +    #endif
> +    #ifdef SIGPIPE
> +    { "PIPE", SIGPIPE },
> +    #endif
> +    #ifdef SIGALRM
> +    { "ALRM", SIGALRM },
> +    #endif
> +    #ifdef SIGTERM
> +    { "TERM", SIGTERM },
> +    #endif
> +    #ifdef SIGURG
> +    { "URG", SIGURG },
> +    #endif
> +    #ifdef SIGSTOP
> +    { "STOP", SIGSTOP },
> +    #endif
> +    #ifdef SIGTSTP
> +    { "TSTP", SIGTSTP },
> +    #endif
> +    #ifdef SIGCONT
> +    { "CONT", SIGCONT },
> +    #endif
> +    #ifdef SIGCHLD
> +    { "CHLD", SIGCHLD },
> +    #endif
> +    #ifdef SIGCLD
> +    { "CLD", SIGCLD },
> +    #endif
> +    #ifdef SIGTTIN
> +    { "TTIN", SIGTTIN },
> +    #endif
> +    #ifdef SIGTTOU
> +    { "TTOU", SIGTTOU },
> +    #endif
> +    #ifdef SIGIO
> +    { "IO", SIGIO },
> +    #endif
> +    #ifdef SIGPOLL
> +    { "POLL", SIGPOLL },
> +    #endif
> +    #ifdef SIGWINCH
> +    { "WINCH", SIGWINCH },
> +    #endif
> +    #ifdef SIGUSR1
> +    { "USR1", SIGUSR1 },
> +    #endif
> +    #ifdef SIGUSR2
> +    { "USR2", SIGUSR2 },
> +    #endif
> +    // #ifdef SIGRTMIN
> +    // { "RTMIN", SIGRTMIN },
> +    // #endif
> +    // #ifdef SIGRTMAX
> +    // { "RTMAX", SIGRTMAX },
> +    // #endif
> +    #ifdef SIGPWR
> +    { "PWR", SIGPWR },
> +    #endif
> +    #ifdef SIGXCPU
> +    { "XCPU", SIGXCPU },
> +    #endif
> +    #ifdef SIGXFSZ
> +    { "XFSZ", SIGXFSZ },
> +    #endif
> +    #ifdef SIGVTALRM
> +    { "VTALRM", SIGVTALRM },
> +    #endif
> +    #ifdef SIGPROF
> +    { "PROF", SIGPROF },
> +    #endif
> +    #ifdef SIGLOST
> +    { "LOST", SIGLOST }
> +    #endif
> +};
> +
> +#define NUM_OF_SIGS (sizeof(sig_array) / sizeof(sig_name_and_num))
> +
> +int
> +sig2str(int signum, char *str)
> +{
> +
> +  for (sig_name_and_num *i = sig_array; i < &sig_array[NUM_OF_SIGS]; i++){
> +    if (i->sig_num == signum){

Space between the ) and the {

> +        strcpy(str, i->sig_name);
> +        return 0;
> +    }
> +  }
> +  sprintf(str, "Unknown signal %d", signum);
> +  return -1;
> +}
> +
> +int
> +str2sig(const char *__restrict str, int *__restrict pnum)
> +{
> +  for (sig_name_and_num *i = sig_array; i < &sig_array[NUM_OF_SIGS]; i++){
> +    if (strcmp(i->sig_name, str) == 0){

Two more ){ needing a space.

> +        *pnum = i->sig_num;
> +        return 0;
> +    }
> +  }
> +  return -1;
> +}
> --
> 2.31.1
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel


More information about the devel mailing list