|
|
1.1 root 1: //
2: // nono
3: // Copyright (C) 2018 [email protected]
4: //
5:
6: #include "header.h"
7: #include "mainapp.h"
8:
9: // 高速モード (XXX 設定ファイルと含めて見直すこと)
10: bool fast_mode;
11:
12: // VM ディレクトリ
13: std::string vmdir;
14:
15: // ログ指定文字列 (-L)
16: char logopt[256];
17:
18: // 引数 arg のログ指定文字列をパースする。
19: // arg は "foo=1,bar=2" 形式の文字列で、これを分解して
20: // それぞれ担当するオブジェクトのログレベルにセットする。
21: bool
22: parse_logopt(const char *arg, u_int vmtype)
23: {
24: char *buf;
25: char *last;
26: char *p;
27: bool rv;
28:
29: // "help" (完全一致) なら識別子一覧を表示。
30: if (strcmp(arg, "help") == 0) {
31: for (auto& obj : gObjects) {
32: if (obj->logname != "?") {
33: printf("%s\n", obj->logname.c_str());
34: }
35: }
36: // エイリアスとか
37: printf("sch -> scheduler\n");
38: if (vmtype == VM::TYPE_LUNA) {
39: printf("ppi -> pio\n");
40: printf("scc -> sio\n");
41: }
42: printf("all\n");
43: return false;
44: }
45:
46: rv = false;
47: buf = strdup(arg);
48: for (p = strtok_r(buf, ",", &last);
49: p;
50: p = strtok_r(NULL, ",", &last))
51: {
52: const char *name;
53: char *v;
54: int val;
55:
56: name = p;
57:
58: v = strchr(p, '=');
59: if (v) {
60: *v++ = '\0';
61: val = atoi(v);
62: } else {
63: val = 1;
64: }
65: // ここで name は変数名、val は値(省略されたら1)
66:
67: if (strlen(name) < 1) {
68: printf("invalid logname '%s'\n", name);
69: goto abort;
70: }
71:
72: // 短縮形とかエイリアスとか
73: if (strcmp(name, "sch") == 0)
74: name = "scheduler";
75: if (vmtype == VM::TYPE_LUNA) {
76: if (strcmp(name, "pio") == 0)
77: name = "ppi";
78: if (strcmp(name, "scc") == 0)
79: name = "sio";
80: }
81:
82: // 比較
83: if (strcmp(name, "all") == 0) {
84: // "all" なら none 以外の全部にセット
85: for (auto& obj : gObjects) {
86: obj->loglevel = val;
87: }
88: } else {
89: // それ以外は一致するキーを探してセット
90: std::string sname = name;
91: bool found = false;
92: for (auto& obj : gObjects) {
93: if (obj->logname == sname) {
94: obj->loglevel = val;
95: found = true;
96: break;
97: }
98: }
99: // 見つからない場合はエラー
100: if (!found) {
101: printf("invalid logname '%s'\n", name);
102: goto abort;
103: }
104: }
105: }
106:
107: rv = true;
108: abort:
109: free(buf);
110: return rv;
111: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.