Skip to content

Commit

Permalink
LibC: Move getsignalbyname() helper from Userland/kill into LibC
Browse files Browse the repository at this point in the history
  • Loading branch information
awesomekling committed Oct 29, 2020
1 parent a6b2598 commit ad0295d
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 49 deletions.
50 changes: 50 additions & 0 deletions Libraries/LibC/signal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
#include <setjmp.h>
#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

extern "C" {
Expand Down Expand Up @@ -186,4 +187,53 @@ int sigsuspend(const sigset_t*)
dbgprintf("FIXME: Implement sigsuspend()\n");
ASSERT_NOT_REACHED();
}

static const char* signal_names[] = {
"INVAL",
"HUP",
"INT",
"QUIT",
"ILL",
"TRAP",
"ABRT",
"BUS",
"FPE",
"KILL",
"USR1",
"SEGV",
"USR2",
"PIPE",
"ALRM",
"TERM",
"STKFLT",
"CHLD",
"CONT",
"STOP",
"TSTP",
"TTIN",
"TTOU",
"URG",
"XCPU",
"XFSZ",
"VTALRM",
"PROF",
"WINCH",
"IO",
"INFO",
"SYS",
};

static_assert(sizeof(signal_names) == sizeof(const char*) * 32);

int getsignalbyname(const char* name)
{
ASSERT(name);
for (size_t i = 0; i < NSIG; ++i) {
auto* signal_name = signal_names[i];
if (!strcmp(signal_name, name))
return i;
}
errno = EINVAL;
return -1;
}
}
1 change: 1 addition & 0 deletions Libraries/LibC/signal.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ int sigprocmask(int how, const sigset_t* set, sigset_t* old_set);
int sigpending(sigset_t*);
int sigsuspend(const sigset_t*);
int raise(int sig);
int getsignalbyname(const char*);

extern const char* sys_siglist[NSIG];

Expand Down
49 changes: 0 additions & 49 deletions Userland/kill.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,55 +39,6 @@ static void print_usage_and_exit()
exit(1);
}

static const char* signal_names[] = {
"INVAL",
"HUP",
"INT",
"QUIT",
"ILL",
"TRAP",
"ABRT",
"BUS",
"FPE",
"KILL",
"USR1",
"SEGV",
"USR2",
"PIPE",
"ALRM",
"TERM",
"STKFLT",
"CHLD",
"CONT",
"STOP",
"TSTP",
"TTIN",
"TTOU",
"URG",
"XCPU",
"XFSZ",
"VTALRM",
"PROF",
"WINCH",
"IO",
"INFO",
"SYS"
};

static_assert(sizeof(signal_names) == sizeof(const char*) * 32);

int getsignalbyname(const char* name)
{
ASSERT(name);
for (size_t i = 0; i < NSIG; ++i) {
auto* signal_name = signal_names[i];
if (!strcmp(signal_name, name))
return i;
}
errno = EINVAL;
return -1;
}

int main(int argc, char** argv)
{
if (pledge("stdio proc", nullptr) < 0) {
Expand Down

0 comments on commit ad0295d

Please sign in to comment.