From 5984f08dd2286d48a5c2254225532575f2636f37 Mon Sep 17 00:00:00 2001 From: Michael Santos Date: Mon, 13 Jul 2015 10:13:04 -0400 Subject: [PATCH] signal: call per file c_src/sys/alcove_signal.c has a function to map signal numbers to constants used by the signal handler in the event loop. --- c_src/sys/alcove_signal.c | 24 +++++ .../alcove_signal_constants.h} | 2 +- c_src/sys/kill.c | 56 +++++++++++ c_src/{alcove_signal.c => sys/sigaction.c} | 92 +------------------ c_src/sys/signal_constant.c | 37 ++++++++ c_src/sys/signal_define.c | 41 +++++++++ 6 files changed, 160 insertions(+), 92 deletions(-) create mode 100644 c_src/sys/alcove_signal.c rename c_src/{alcove_signal.h => sys/alcove_signal_constants.h} (97%) create mode 100644 c_src/sys/kill.c rename c_src/{alcove_signal.c => sys/sigaction.c} (53%) create mode 100644 c_src/sys/signal_constant.c create mode 100644 c_src/sys/signal_define.c diff --git a/c_src/sys/alcove_signal.c b/c_src/sys/alcove_signal.c new file mode 100644 index 0000000..e1a59a6 --- /dev/null +++ b/c_src/sys/alcove_signal.c @@ -0,0 +1,24 @@ +/* Copyright (c) 2014, Michael Santos + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ +#include "alcove.h" +#include "alcove_call.h" +#include "alcove_signal_constants.h" + + ssize_t +alcove_signal_name(char *buf, size_t len, int *index, int signum) +{ + return alcove_encode_constant(buf, len, index, signum, + alcove_signal_constants); +} diff --git a/c_src/alcove_signal.h b/c_src/sys/alcove_signal_constants.h similarity index 97% rename from c_src/alcove_signal.h rename to c_src/sys/alcove_signal_constants.h index ae3f4ff..e941eff 100644 --- a/c_src/alcove_signal.h +++ b/c_src/sys/alcove_signal_constants.h @@ -12,7 +12,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -const alcove_define_t alcove_signal_constants[] = { +static const alcove_define_t alcove_signal_constants[] = { #ifdef SIGHUP ALCOVE_DEFINE(SIGHUP), #endif diff --git a/c_src/sys/kill.c b/c_src/sys/kill.c new file mode 100644 index 0000000..75acdea --- /dev/null +++ b/c_src/sys/kill.c @@ -0,0 +1,56 @@ +/* Copyright (c) 2014, Michael Santos + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ +#include "alcove.h" +#include "alcove_call.h" +#include "alcove_signal_constants.h" + +/* + * kill(2) + * + */ + ssize_t +alcove_sys_kill(alcove_state_t *ap, const char *arg, size_t len, + char *reply, size_t rlen) +{ + int index = 0; + + pid_t pid = 0; + int signum = 0; + int rv = 0; + + /* pid */ + if (alcove_decode_int(arg, len, &index, &pid) < 0) + return -1; + + /* signal */ + switch (alcove_decode_define(arg, len, &index, &signum, + alcove_signal_constants)) { + case 0: + break; + + case 1: + return alcove_mk_errno(reply, rlen, EINVAL); + + case -1: + default: + return -1; + } + + rv = kill(pid, signum); + + return (rv < 0) + ? alcove_mk_errno(reply, rlen, errno) + : alcove_mk_atom(reply, rlen, "ok"); +} diff --git a/c_src/alcove_signal.c b/c_src/sys/sigaction.c similarity index 53% rename from c_src/alcove_signal.c rename to c_src/sys/sigaction.c index a2bc8bf..dbe2b28 100644 --- a/c_src/alcove_signal.c +++ b/c_src/sys/sigaction.c @@ -14,46 +14,7 @@ */ #include "alcove.h" #include "alcove_call.h" -#include "alcove_signal.h" - -/* - * kill(2) - * - */ - ssize_t -alcove_sys_kill(alcove_state_t *ap, const char *arg, size_t len, - char *reply, size_t rlen) -{ - int index = 0; - - pid_t pid = 0; - int signum = 0; - int rv = 0; - - /* pid */ - if (alcove_decode_int(arg, len, &index, &pid) < 0) - return -1; - - /* signal */ - switch (alcove_decode_define(arg, len, &index, &signum, - alcove_signal_constants)) { - case 0: - break; - - case 1: - return alcove_mk_errno(reply, rlen, EINVAL); - - case -1: - default: - return -1; - } - - rv = kill(pid, signum); - - return (rv < 0) - ? alcove_mk_errno(reply, rlen, errno) - : alcove_mk_atom(reply, rlen, "ok"); -} +#include "alcove_signal_constants.h" /* * sigaction(2) @@ -117,54 +78,3 @@ alcove_sys_sigaction(alcove_state_t *ap, const char *arg, size_t len, ? alcove_mk_errno(reply, rlen, errno) : alcove_mk_atom(reply, rlen, "ok"); } - -/* - * signals - * - */ - ssize_t -alcove_sys_signal_define(alcove_state_t *ap, const char *arg, size_t len, - char *reply, size_t rlen) -{ - int index = 0; - int rindex = 0; - - char name[MAXATOMLEN] = {0}; - - /* constant */ - if (alcove_decode_atom(arg, len, &index, name) < 0) - return -1; - - ALCOVE_ERR(alcove_encode_version(reply, rlen, &rindex)); - ALCOVE_ERR(alcove_encode_define(reply, rlen, &rindex, - name, alcove_signal_constants)); - - return rindex; -} - - ssize_t -alcove_sys_signal_constant(alcove_state_t *ap, const char *arg, size_t len, - char *reply, size_t rlen) -{ - int index = 0; - int rindex = 0; - - int signum = 0; - - /* signum */ - if (alcove_decode_int(arg, len, &index, &signum) < 0) - return -1; - - ALCOVE_ERR(alcove_encode_version(reply, rlen, &rindex)); - ALCOVE_ERR(alcove_encode_constant(reply, rlen, &rindex, - signum, alcove_signal_constants)); - - return rindex; -} - - ssize_t -alcove_signal_name(char *buf, size_t len, int *index, int signum) -{ - return alcove_encode_constant(buf, len, index, signum, - alcove_signal_constants); -} diff --git a/c_src/sys/signal_constant.c b/c_src/sys/signal_constant.c new file mode 100644 index 0000000..0dadb64 --- /dev/null +++ b/c_src/sys/signal_constant.c @@ -0,0 +1,37 @@ +/* Copyright (c) 2014, Michael Santos + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ +#include "alcove.h" +#include "alcove_call.h" +#include "alcove_signal_constants.h" + + ssize_t +alcove_sys_signal_constant(alcove_state_t *ap, const char *arg, size_t len, + char *reply, size_t rlen) +{ + int index = 0; + int rindex = 0; + + int signum = 0; + + /* signum */ + if (alcove_decode_int(arg, len, &index, &signum) < 0) + return -1; + + ALCOVE_ERR(alcove_encode_version(reply, rlen, &rindex)); + ALCOVE_ERR(alcove_encode_constant(reply, rlen, &rindex, + signum, alcove_signal_constants)); + + return rindex; +} diff --git a/c_src/sys/signal_define.c b/c_src/sys/signal_define.c new file mode 100644 index 0000000..d9d2b71 --- /dev/null +++ b/c_src/sys/signal_define.c @@ -0,0 +1,41 @@ +/* Copyright (c) 2014, Michael Santos + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ +#include "alcove.h" +#include "alcove_call.h" +#include "alcove_signal_constants.h" + +/* + * signals + * + */ + ssize_t +alcove_sys_signal_define(alcove_state_t *ap, const char *arg, size_t len, + char *reply, size_t rlen) +{ + int index = 0; + int rindex = 0; + + char name[MAXATOMLEN] = {0}; + + /* constant */ + if (alcove_decode_atom(arg, len, &index, name) < 0) + return -1; + + ALCOVE_ERR(alcove_encode_version(reply, rlen, &rindex)); + ALCOVE_ERR(alcove_encode_define(reply, rlen, &rindex, + name, alcove_signal_constants)); + + return rindex; +}