xref: /DragonOS/user/apps/dmesg/dmesg.c (revision c635d8a9cfe25bc11779f323ef0c7d7a0f597d4a)
1 #include "dmesg.h"
2 #include <stdio.h>
3 #include <string.h>
4 
5 /**
6  * @brief 识别dmesg程序的第一个选项参数
7  *
8  * @param arg dmesg命令第一个选项参数
9  * @return int 有效时返回对应选项码,无效时返回 -1
10  */
11 int getoption(char *arg)
12 {
13     if (!strcmp(arg, "-h") || !strcmp(arg, "--help"))
14         return 0;
15     else if (!strcmp(arg, "-c") || !strcmp(arg, "--read-clear"))
16         return 4;
17     else if (!strcmp(arg, "-C") || !strcmp(arg, "--clear"))
18         return 5;
19     else if (!strcmp(arg, "-l") || !strcmp(arg, "--level"))
20         return 8;
21 
22     return -1;
23 }
24 
25 /**
26  * @brief 识别dmesg程序的第二个选项参数
27  *
28  * @param arg dmesg命令第一个选项参数
29  * @return int 有效时返回设置的日志级别,无效时返回 -1
30  */
31 int getlevel(char *arg)
32 {
33     if (!strcmp(arg, "EMERG") || !strcmp(arg, "emerg"))
34         return 0;
35     else if (!strcmp(arg, "ALERT") || !strcmp(arg, "alert"))
36         return 1;
37     else if (!strcmp(arg, "CRIT") || !strcmp(arg, "crit"))
38         return 2;
39     else if (!strcmp(arg, "ERR") || !strcmp(arg, "err"))
40         return 3;
41     else if (!strcmp(arg, "WARN") || !strcmp(arg, "warn"))
42         return 4;
43     else if (!strcmp(arg, "NOTICE") || !strcmp(arg, "notice"))
44         return 5;
45     else if (!strcmp(arg, "INFO") || !strcmp(arg, "info"))
46         return 6;
47     else if (!strcmp(arg, "DEBUG") || !strcmp(arg, "debug"))
48         return 7;
49     else
50     {
51         printf("dmesg: unknown level '%s'\n", arg);
52     }
53     return -2;
54 }
55 
56 /**
57  * @brief 打印dmesg手册
58  */
59 void print_help_msg()
60 {
61     const char *help_msg = "Usage:\n"
62                            " dmesg [options]\n\n"
63                            "Display or control the kernel ring buffer.\n\n"
64                            "Options:\n"
65                            " -C, --clear                 clear the kernel ring buffer\n"
66                            " -c, --read-clear            read and clear all messages\n"
67                            " -l, --level <list>          restrict output to defined levels\n"
68                            " -h, --help                  display this help\n\n"
69                            "Supported log levels (priorities):\n"
70                            "   emerg - system is unusable\n"
71                            "   alert - action must be taken immediately\n"
72                            "    crit - critical conditions\n"
73                            "     err - error conditions\n"
74                            "    warn - warning conditions\n"
75                            "  notice - normal but significant condition\n"
76                            "    info - informational\n"
77                            "   debug - debug-level messages\n";
78     printf("%s\n", help_msg);
79 }
80 
81 /**
82  * @brief 打印dmesg错误使用的信息
83  */
84 void print_bad_usage_msg()
85 {
86     const char *bad_usage_msg = "dmesg: bad usage\nTry 'dmesg --help' for more information.";
87     printf("%s\n", bad_usage_msg);
88 }