From 370caa511371065b3fea86580757a7809d9054ac Mon Sep 17 00:00:00 2001 From: Christian Brauner Date: Mon, 16 Jul 2018 11:10:01 +0200 Subject: [PATCH] confile: move signal helpers to confile utils Signed-off-by: Christian Brauner --- src/lxc/confile.c | 133 ---------------------------------------- src/lxc/confile_utils.c | 133 ++++++++++++++++++++++++++++++++++++++++ src/lxc/confile_utils.h | 1 + 3 files changed, 134 insertions(+), 133 deletions(-) diff --git a/src/lxc/confile.c b/src/lxc/confile.c index f854ecaf65..4f46d7bfeb 100644 --- a/src/lxc/confile.c +++ b/src/lxc/confile.c @@ -238,90 +238,6 @@ static struct lxc_config_t config[] = { { "lxc.proc", set_config_proc, get_config_proc, clr_config_proc, }, }; -struct signame { - int num; - const char *name; -}; - -static const struct signame signames[] = { - { SIGHUP, "HUP" }, - { SIGINT, "INT" }, - { SIGQUIT, "QUIT" }, - { SIGILL, "ILL" }, - { SIGABRT, "ABRT" }, - { SIGFPE, "FPE" }, - { SIGKILL, "KILL" }, - { SIGSEGV, "SEGV" }, - { SIGPIPE, "PIPE" }, - { SIGALRM, "ALRM" }, - { SIGTERM, "TERM" }, - { SIGUSR1, "USR1" }, - { SIGUSR2, "USR2" }, - { SIGCHLD, "CHLD" }, - { SIGCONT, "CONT" }, - { SIGSTOP, "STOP" }, - { SIGTSTP, "TSTP" }, - { SIGTTIN, "TTIN" }, - { SIGTTOU, "TTOU" }, -#ifdef SIGTRAP - { SIGTRAP, "TRAP" }, -#endif -#ifdef SIGIOT - { SIGIOT, "IOT" }, -#endif -#ifdef SIGEMT - { SIGEMT, "EMT" }, -#endif -#ifdef SIGBUS - { SIGBUS, "BUS" }, -#endif -#ifdef SIGSTKFLT - { SIGSTKFLT, "STKFLT" }, -#endif -#ifdef SIGCLD - { SIGCLD, "CLD" }, -#endif -#ifdef SIGURG - { SIGURG, "URG" }, -#endif -#ifdef SIGXCPU - { SIGXCPU, "XCPU" }, -#endif -#ifdef SIGXFSZ - { SIGXFSZ, "XFSZ" }, -#endif -#ifdef SIGVTALRM - { SIGVTALRM, "VTALRM" }, -#endif -#ifdef SIGPROF - { SIGPROF, "PROF" }, -#endif -#ifdef SIGWINCH - { SIGWINCH, "WINCH" }, -#endif -#ifdef SIGIO - { SIGIO, "IO" }, -#endif -#ifdef SIGPOLL - { SIGPOLL, "POLL" }, -#endif -#ifdef SIGINFO - { SIGINFO, "INFO" }, -#endif -#ifdef SIGLOST - { SIGLOST, "LOST" }, -#endif -#ifdef SIGPWR - { SIGPWR, "PWR" }, -#endif -#ifdef SIGUNUSED - { SIGUNUSED, "UNUSED" }, -#endif -#ifdef SIGSYS - { SIGSYS, "SYS" }, -#endif -}; - static const size_t config_size = sizeof(config) / sizeof(struct lxc_config_t); struct lxc_config_t *lxc_get_config(const char *key) @@ -1246,55 +1162,6 @@ static int set_config_autodev(const char *key, const char *value, return 0; } -static int sig_num(const char *sig) -{ - unsigned int signum; - - if (lxc_safe_uint(sig, &signum) < 0) - return -1; - - return signum; -} - -static int rt_sig_num(const char *signame) -{ - int rtmax = 0, sig_n = 0; - - if (strncasecmp(signame, "max-", 4) == 0) { - rtmax = 1; - } - - signame += 4; - if (!isdigit(*signame)) - return -1; - - sig_n = sig_num(signame); - sig_n = rtmax ? SIGRTMAX - sig_n : SIGRTMIN + sig_n; - if (sig_n > SIGRTMAX || sig_n < SIGRTMIN) - return -1; - - return sig_n; -} - -static int sig_parse(const char *signame) -{ - size_t n; - - if (isdigit(*signame)) { - return sig_num(signame); - } else if (strncasecmp(signame, "sig", 3) == 0) { - signame += 3; - if (strncasecmp(signame, "rt", 2) == 0) - return rt_sig_num(signame + 2); - for (n = 0; n < sizeof(signames) / sizeof((signames)[0]); n++) { - if (strcasecmp(signames[n].name, signame) == 0) - return signames[n].num; - } - } - - return -1; -} - static int set_config_signal_halt(const char *key, const char *value, struct lxc_conf *lxc_conf, void *data) { diff --git a/src/lxc/confile_utils.c b/src/lxc/confile_utils.c index 8100cf741f..ff563e0ac9 100644 --- a/src/lxc/confile_utils.c +++ b/src/lxc/confile_utils.c @@ -778,3 +778,136 @@ int lxc_inherit_namespace(const char *lxcname_or_pid, const char *lxcpath, return fd; } + +struct signame { + int num; + const char *name; +}; + +static const struct signame signames[] = { + { SIGHUP, "HUP" }, + { SIGINT, "INT" }, + { SIGQUIT, "QUIT" }, + { SIGILL, "ILL" }, + { SIGABRT, "ABRT" }, + { SIGFPE, "FPE" }, + { SIGKILL, "KILL" }, + { SIGSEGV, "SEGV" }, + { SIGPIPE, "PIPE" }, + { SIGALRM, "ALRM" }, + { SIGTERM, "TERM" }, + { SIGUSR1, "USR1" }, + { SIGUSR2, "USR2" }, + { SIGCHLD, "CHLD" }, + { SIGCONT, "CONT" }, + { SIGSTOP, "STOP" }, + { SIGTSTP, "TSTP" }, + { SIGTTIN, "TTIN" }, + { SIGTTOU, "TTOU" }, +#ifdef SIGTRAP + { SIGTRAP, "TRAP" }, +#endif +#ifdef SIGIOT + { SIGIOT, "IOT" }, +#endif +#ifdef SIGEMT + { SIGEMT, "EMT" }, +#endif +#ifdef SIGBUS + { SIGBUS, "BUS" }, +#endif +#ifdef SIGSTKFLT + { SIGSTKFLT, "STKFLT" }, +#endif +#ifdef SIGCLD + { SIGCLD, "CLD" }, +#endif +#ifdef SIGURG + { SIGURG, "URG" }, +#endif +#ifdef SIGXCPU + { SIGXCPU, "XCPU" }, +#endif +#ifdef SIGXFSZ + { SIGXFSZ, "XFSZ" }, +#endif +#ifdef SIGVTALRM + { SIGVTALRM, "VTALRM" }, +#endif +#ifdef SIGPROF + { SIGPROF, "PROF" }, +#endif +#ifdef SIGWINCH + { SIGWINCH, "WINCH" }, +#endif +#ifdef SIGIO + { SIGIO, "IO" }, +#endif +#ifdef SIGPOLL + { SIGPOLL, "POLL" }, +#endif +#ifdef SIGINFO + { SIGINFO, "INFO" }, +#endif +#ifdef SIGLOST + { SIGLOST, "LOST" }, +#endif +#ifdef SIGPWR + { SIGPWR, "PWR" }, +#endif +#ifdef SIGUNUSED + { SIGUNUSED, "UNUSED" }, +#endif +#ifdef SIGSYS + { SIGSYS, "SYS" }, +#endif +}; + +static int sig_num(const char *sig) +{ + unsigned int signum; + + if (lxc_safe_uint(sig, &signum) < 0) + return -1; + + return signum; +} + +static int rt_sig_num(const char *signame) +{ + int rtmax = 0, sig_n = 0; + + if (strncasecmp(signame, "max-", 4) == 0) { + rtmax = 1; + } + + signame += 4; + if (!isdigit(*signame)) + return -1; + + sig_n = sig_num(signame); + sig_n = rtmax ? SIGRTMAX - sig_n : SIGRTMIN + sig_n; + if (sig_n > SIGRTMAX || sig_n < SIGRTMIN) + return -1; + + return sig_n; +} + +int sig_parse(const char *signame) +{ + size_t n; + + if (isdigit(*signame)) { + return sig_num(signame); + } else if (strncasecmp(signame, "sig", 3) == 0) { + signame += 3; + if (strncasecmp(signame, "rt", 2) == 0) + return rt_sig_num(signame + 2); + for (n = 0; n < sizeof(signames) / sizeof((signames)[0]); n++) { + if (strcasecmp(signames[n].name, signame) == 0) + return signames[n].num; + } + } + + return -1; +} diff --git a/src/lxc/confile_utils.h b/src/lxc/confile_utils.h index a5b76820e2..ef11969fc8 100644 --- a/src/lxc/confile_utils.h +++ b/src/lxc/confile_utils.h @@ -92,5 +92,6 @@ extern int lxc_get_conf_uint64(struct lxc_conf *c, char *retv, int inlen, uint64 extern bool parse_limit_value(const char **value, rlim_t *res); extern int lxc_inherit_namespace(const char *lxcname_or_pid, const char *lxcpath, const char *namespace); +extern int sig_parse(const char *signame); #endif /* __LXC_CONFILE_UTILS_H */