/* SPDX-License-Identifier: LGPL-2.1-or-later */

#include "kill.h"
#include "signal-util.h"
#include "string-table.h"

void kill_context_init(KillContext *c) {
        assert(c);

        c->kill_signal = SIGTERM;
        /* restart_kill_signal is unset by default and we fall back to kill_signal */
        c->final_kill_signal = SIGKILL;
        c->send_sigkill = true;
        c->send_sighup = false;
        c->watchdog_signal = SIGABRT;
}

void kill_context_dump(KillContext *c, FILE *f, const char *prefix) {
        assert(c);

        prefix = strempty(prefix);

        fprintf(f,
                "%sKillMode: %s\n"
                "%sKillSignal: SIG%s\n"
                "%sRestartKillSignal: SIG%s\n"
                "%sFinalKillSignal: SIG%s\n"
                "%sSendSIGKILL: %s\n"
                "%sSendSIGHUP: %s\n",
                prefix, kill_mode_to_string(c->kill_mode),
                prefix, signal_to_string(c->kill_signal),
                prefix, signal_to_string(restart_kill_signal(c)),
                prefix, signal_to_string(c->final_kill_signal),
                prefix, yes_no(c->send_sigkill),
                prefix, yes_no(c->send_sighup));
}

static const char* const kill_mode_table[_KILL_MODE_MAX] = {
        [KILL_CONTROL_GROUP] = "control-group",
        [KILL_PROCESS]       = "process",
        [KILL_MIXED]         = "mixed",
        [KILL_NONE]          = "none",
};

DEFINE_STRING_TABLE_LOOKUP(kill_mode, KillMode);

static const char* const kill_who_table[_KILL_WHO_MAX] = {
        [KILL_MAIN]         = "main",
        [KILL_CONTROL]      = "control",
        [KILL_ALL]          = "all",
        [KILL_MAIN_FAIL]    = "main-fail",
        [KILL_CONTROL_FAIL] = "control-fail",
        [KILL_ALL_FAIL]     = "all-fail",
};

DEFINE_STRING_TABLE_LOOKUP(kill_who, KillWho);
