Annotation of nono/util/runx/util.cpp, revision 1.1.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.