xref: /DragonOS/user/apps/dmesg/dmesg.c (revision bc6f0a967c8cb1e9379ced184b25a7722fbda2a4)
18d72b68dSJomo #include "dmesg.h"
2*bc6f0a96S裕依 #include <stdio.h>
3*bc6f0a96S裕依 #include <string.h>
48d72b68dSJomo 
58d72b68dSJomo /**
68d72b68dSJomo  * @brief 识别dmesg程序的第一个选项参数
78d72b68dSJomo  *
88d72b68dSJomo  * @param arg dmesg命令第一个选项参数
98d72b68dSJomo  * @return int 有效时返回对应选项码,无效时返回 -1
108d72b68dSJomo  */
getoption(char * arg)11*bc6f0a96S裕依 int getoption(char *arg)
128d72b68dSJomo {
138d72b68dSJomo     if (!strcmp(arg, "-h") || !strcmp(arg, "--help"))
148d72b68dSJomo         return 0;
158d72b68dSJomo     else if (!strcmp(arg, "-c") || !strcmp(arg, "--read-clear"))
168d72b68dSJomo         return 4;
178d72b68dSJomo     else if (!strcmp(arg, "-C") || !strcmp(arg, "--clear"))
188d72b68dSJomo         return 5;
198d72b68dSJomo     else if (!strcmp(arg, "-l") || !strcmp(arg, "--level"))
208d72b68dSJomo         return 8;
218d72b68dSJomo 
228d72b68dSJomo     return -1;
238d72b68dSJomo }
248d72b68dSJomo 
258d72b68dSJomo /**
268d72b68dSJomo  * @brief 识别dmesg程序的第二个选项参数
278d72b68dSJomo  *
288d72b68dSJomo  * @param arg dmesg命令第一个选项参数
298d72b68dSJomo  * @return int 有效时返回设置的日志级别,无效时返回 -1
308d72b68dSJomo  */
getlevel(char * arg)318d72b68dSJomo int getlevel(char *arg)
328d72b68dSJomo {
338d72b68dSJomo     if (!strcmp(arg, "EMERG") || !strcmp(arg, "emerg"))
348d72b68dSJomo         return 0;
358d72b68dSJomo     else if (!strcmp(arg, "ALERT") || !strcmp(arg, "alert"))
368d72b68dSJomo         return 1;
378d72b68dSJomo     else if (!strcmp(arg, "CRIT") || !strcmp(arg, "crit"))
388d72b68dSJomo         return 2;
398d72b68dSJomo     else if (!strcmp(arg, "ERR") || !strcmp(arg, "err"))
408d72b68dSJomo         return 3;
418d72b68dSJomo     else if (!strcmp(arg, "WARN") || !strcmp(arg, "warn"))
428d72b68dSJomo         return 4;
438d72b68dSJomo     else if (!strcmp(arg, "NOTICE") || !strcmp(arg, "notice"))
448d72b68dSJomo         return 5;
458d72b68dSJomo     else if (!strcmp(arg, "INFO") || !strcmp(arg, "info"))
468d72b68dSJomo         return 6;
478d72b68dSJomo     else if (!strcmp(arg, "DEBUG") || !strcmp(arg, "debug"))
488d72b68dSJomo         return 7;
498d72b68dSJomo     else
508d72b68dSJomo     {
518d72b68dSJomo         printf("dmesg: unknown level '%s'\n", arg);
528d72b68dSJomo     }
538d72b68dSJomo     return -2;
548d72b68dSJomo }
558d72b68dSJomo 
568d72b68dSJomo /**
578d72b68dSJomo  * @brief 打印dmesg手册
588d72b68dSJomo  */
print_help_msg()598d72b68dSJomo void print_help_msg()
608d72b68dSJomo {
618d72b68dSJomo     const char *help_msg = "Usage:\n"
628d72b68dSJomo                            " dmesg [options]\n\n"
638d72b68dSJomo                            "Display or control the kernel ring buffer.\n\n"
648d72b68dSJomo                            "Options:\n"
658d72b68dSJomo                            " -C, --clear                 clear the kernel ring buffer\n"
668d72b68dSJomo                            " -c, --read-clear            read and clear all messages\n"
678d72b68dSJomo                            " -l, --level <list>          restrict output to defined levels\n"
688d72b68dSJomo                            " -h, --help                  display this help\n\n"
698d72b68dSJomo                            "Supported log levels (priorities):\n"
708d72b68dSJomo                            "   emerg - system is unusable\n"
718d72b68dSJomo                            "   alert - action must be taken immediately\n"
728d72b68dSJomo                            "    crit - critical conditions\n"
738d72b68dSJomo                            "     err - error conditions\n"
748d72b68dSJomo                            "    warn - warning conditions\n"
758d72b68dSJomo                            "  notice - normal but significant condition\n"
768d72b68dSJomo                            "    info - informational\n"
778d72b68dSJomo                            "   debug - debug-level messages\n";
788d72b68dSJomo     printf("%s\n", help_msg);
798d72b68dSJomo }
808d72b68dSJomo 
818d72b68dSJomo /**
828d72b68dSJomo  * @brief 打印dmesg错误使用的信息
838d72b68dSJomo  */
print_bad_usage_msg()848d72b68dSJomo void print_bad_usage_msg()
858d72b68dSJomo {
868d72b68dSJomo     const char *bad_usage_msg = "dmesg: bad usage\nTry 'dmesg --help' for more information.";
878d72b68dSJomo     printf("%s\n", bad_usage_msg);
888d72b68dSJomo }