Annotation of nono/util/runx/util.cpp, revision 1.1

1.1     ! root        1: // vi:set ts=4:
        !             2: 
        !             3: //
        !             4: // nono
        !             5: // Copyright (C) 2024 nono project
        !             6: // Licensed under nono-license.txt
        !             7: //
        !             8: 
        !             9: #include "runx.h"
        !            10: #include <stdio.h>
        !            11: #include <signal.h>
        !            12: #include <sys/param.h>
        !            13: #include <sys/sysctl.h>
        !            14: 
        !            15: // ページサイズを取得する。
        !            16: int
        !            17: getpgsize()
        !            18: {
        !            19:    const int mib[2] = { CTL_HW, HW_PAGESIZE };
        !            20:    int val;
        !            21:    size_t len;
        !            22: 
        !            23:    len = sizeof(val);
        !            24:    if (sysctl(mib, countof(mib), &val, &len, NULL, 0) < 0) {
        !            25:        err(1, "sysctl");
        !            26:    }
        !            27:    return val;
        !            28: }
        !            29: 
        !            30: // シグナル名(定数名) を返す。なければ "signal %d" を返す。
        !            31: // スタティック変数を返す場合があるので同時に2回呼ばないこと。
        !            32: // (Linux には sigabbrev_np() がある)
        !            33: const char *
        !            34: signame(int signo)
        !            35: {
        !            36:    static char buf[16];
        !            37:    static const struct {
        !            38:        int val;
        !            39:        const char *name;
        !            40:    } table[] = {
        !            41:        // <sys/signal.h> から加工した一覧。
        !            42:        // ターゲットは NetBSD だと分かっているので細かいことは気にしない。
        !            43: #define E(s)   { s, #s }
        !            44:        E(SIGHUP),
        !            45:        E(SIGINT),
        !            46:        E(SIGQUIT),
        !            47:        E(SIGILL),
        !            48:        E(SIGTRAP),
        !            49:        E(SIGABRT),
        !            50:        E(SIGEMT),
        !            51:        E(SIGFPE),
        !            52:        E(SIGKILL),
        !            53:        E(SIGBUS),
        !            54:        E(SIGSEGV),
        !            55:        E(SIGSYS),
        !            56:        E(SIGPIPE),
        !            57:        E(SIGALRM),
        !            58:        E(SIGTERM),
        !            59:        E(SIGURG),
        !            60:        E(SIGSTOP),
        !            61:        E(SIGTSTP),
        !            62:        E(SIGCONT),
        !            63:        E(SIGCHLD),
        !            64:        E(SIGTTIN),
        !            65:        E(SIGTTOU),
        !            66:        E(SIGIO),
        !            67:        E(SIGXCPU),
        !            68:        E(SIGXFSZ),
        !            69:        E(SIGVTALRM),
        !            70:        E(SIGPROF),
        !            71:        E(SIGWINCH),
        !            72:        E(SIGINFO),
        !            73:        E(SIGUSR1),
        !            74:        E(SIGUSR2),
        !            75:        E(SIGPWR),
        !            76: #undef E
        !            77:    };
        !            78:    for (int i = 0; i < countof(table); i++) {
        !            79:        if (signo == table[i].val) {
        !            80:            return table[i].name;
        !            81:        }
        !            82:    }
        !            83:    snprintf(buf, sizeof(buf), "signal %d", signo);
        !            84:    return buf;
        !            85: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.