-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmatch.cpp
More file actions
79 lines (72 loc) · 1.76 KB
/
Copy pathmatch.cpp
File metadata and controls
79 lines (72 loc) · 1.76 KB
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
#include <cstring>
#ifdef __cplusplus
extern "C" {
#endif
#include <regex.h>
#include <errno.h>
#include <error.h>
#ifdef __cplusplus
}
#endif
#include <cassert>
using namespace std;
int isMatch(const char *line, const char *reg)
{
int ret;
regex_t preg;
regmatch_t pmatch[1];
ret = regcomp(&preg, reg, REG_EXTENDED);
if(ret)
error_at_line(1, errno, __FILE__, __LINE__, "reg compile error.");
ret = regexec(&preg, line, 1, pmatch, 0);
regfree(&preg);
if(ret == 0)
return 1;
else
return 0;
}
void getMatch(const char *line, const char *reg, char *match)
{
int ret;
regex_t preg;
regmatch_t pmatch[1];
ret = regcomp(&preg, reg, REG_EXTENDED);
if(ret)
error_at_line(1, errno, __FILE__, __LINE__, "reg compile error.");
ret = regexec(&preg, line, 1, pmatch, 0);
assert(ret == 0);
if(pmatch[0].rm_so == -1)
match[0] = '\0';
else {
memcpy(match, line + pmatch[0].rm_so, pmatch[0].rm_eo - pmatch[0].rm_so);
match[pmatch[0].rm_eo - pmatch[0].rm_so] = '\0';
}
regfree(&preg);
}
int isMatchSigCfg(const char *line)
{
int ret = isMatch(line, "rfc_sig_info_type rf_card_.*_[rt]x[01]_[gsmwcdalte]+_[bgc]+[0-9]*_*[abc]*_sig_cfg");
if(ret) {
if(isMatch(line, "init"))
ret = 0;
}
return ret;
}
void getMatchSigCfg(const char *line, char *match)
{
getMatch(line, "rf_card_.*_[rt]x[01]_[gsmwcdalte]+_[bgc]+[0-9]*_*[abc]*_sig_cfg", match);
}
void getMatchDevInfo(const char *line, char *match)
{
getMatch(line, "rf_card_.*_[rt]x[01]_[gsmwcdalte]+_[bgc]+[0-9]*_*[abc]*_device_info", match);
}
int isMatchDevInfo(const char *line)
{
int ret = isMatch(line, "rfc_device_info_type rf_card_.*_[rt]x[01]_[gsmwcdalte]+_[bgc]+[0-9]*_*[abc]*_device_info");
if(ret) {
char exclude_pattern[] = "init";
if(isMatch(line, exclude_pattern))
ret = 0;
}
return ret;
}