forked from CESNET/libyang
-
Notifications
You must be signed in to change notification settings - Fork 0
/
cmd_debug.c
130 lines (109 loc) · 2.51 KB
/
cmd_debug.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/**
* @file cmd_debug.c
* @author Adam Piecek <[email protected]>
* @brief 'verb' command of the libyang's yanglint tool.
*
* Copyright (c) 2023-2023 CESNET, z.s.p.o.
*
* This source code is licensed under BSD 3-Clause License (the "License").
* You may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://opensource.org/licenses/BSD-3-Clause
*/
#include "cmd.h"
#include <assert.h>
#include <getopt.h>
#include <stdint.h>
#include <stdio.h>
#include <strings.h>
#include "libyang.h"
#include "common.h"
#include "yl_opt.h"
struct debug_groups {
char *name;
uint32_t flag;
} const dg [] = {
{"dict", LY_LDGDICT},
{"xpath", LY_LDGXPATH},
{"dep-sets", LY_LDGDEPSETS},
};
#define DG_LENGTH (sizeof dg / sizeof *dg)
void
cmd_debug_help(void)
{
uint32_t i;
printf("Usage: debug (");
for (i = 0; i < DG_LENGTH; i++) {
if ((i + 1) == DG_LENGTH) {
printf("%s", dg[i].name);
} else {
printf("%s | ", dg[i].name);
}
}
printf(")+\n");
}
int
cmd_debug_opt(struct yl_opt *yo, const char *cmdline, char ***posv, int *posc)
{
int rc = 0, argc = 0;
int opt, opt_index;
struct option options[] = {
{"help", no_argument, NULL, 'h'},
{NULL, 0, NULL, 0}
};
if ((rc = parse_cmdline(cmdline, &argc, &yo->argv))) {
return rc;
}
while ((opt = getopt_long(argc, yo->argv, commands[CMD_DEBUG].optstring, options, &opt_index)) != -1) {
switch (opt) {
case 'h':
cmd_debug_help();
return 1;
default:
YLMSG_E("Unknown option.");
return 1;
}
}
*posv = &yo->argv[optind];
*posc = argc - optind;
return 0;
}
int
cmd_debug_dep(struct yl_opt *yo, int posc)
{
(void) yo;
if (yo->interactive && !posc) {
/* no argument */
cmd_debug_help();
return 1;
}
return 0;
}
int
cmd_debug_store(struct ly_ctx **ctx, struct yl_opt *yo, const char *posv)
{
(void) ctx;
uint32_t i;
ly_bool set;
assert(posv);
set = 0;
for (i = 0; i < DG_LENGTH; i++) {
if (!strcasecmp(posv, dg[i].name)) {
yo->dbg_groups |= dg[i].flag;
set = 1;
break;
}
}
if (!set) {
YLMSG_E("Unknown debug group \"%s\".", posv);
return 1;
}
return 0;
}
int
cmd_debug_setlog(struct ly_ctx *ctx, struct yl_opt *yo)
{
(void) ctx;
return ly_log_dbg_groups(yo->dbg_groups);
}