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#ifndef __LIBCFS_STRING_H__
44#define __LIBCFS_STRING_H__
45
46
47
48int cfs_strncasecmp(const char *s1, const char *s2, size_t n);
49
50int cfs_str2mask(const char *str, const char *(*bit2str)(int bit),
51 int *oldmask, int minmask, int allmask);
52
53
54
55
56char *cfs_strdup(const char *str, u_int32_t flags);
57
58
59int cfs_vsnprintf(char *buf, size_t size, const char *fmt, va_list args);
60
61
62int cfs_snprintf(char *buf, size_t size, const char *fmt, ...);
63
64
65char *cfs_firststr(char *str, size_t size);
66
67
68
69
70struct cfs_lstr {
71 char *ls_str;
72 int ls_len;
73};
74
75
76
77
78struct cfs_range_expr {
79
80
81
82 struct list_head re_link;
83 __u32 re_lo;
84 __u32 re_hi;
85 __u32 re_stride;
86};
87
88struct cfs_expr_list {
89 struct list_head el_link;
90 struct list_head el_exprs;
91};
92
93static inline int
94cfs_iswhite(char c)
95{
96 switch (c) {
97 case ' ':
98 case '\t':
99 case '\n':
100 case '\r':
101 return 1;
102 default:
103 break;
104 }
105 return 0;
106}
107
108char *cfs_trimwhite(char *str);
109int cfs_gettok(struct cfs_lstr *next, char delim, struct cfs_lstr *res);
110int cfs_str2num_check(char *str, int nob, unsigned *num,
111 unsigned min, unsigned max);
112int cfs_range_expr_parse(struct cfs_lstr *src, unsigned min, unsigned max,
113 int single_tok, struct cfs_range_expr **expr);
114int cfs_expr_list_match(__u32 value, struct cfs_expr_list *expr_list);
115int cfs_expr_list_values(struct cfs_expr_list *expr_list,
116 int max, __u32 **values);
117static inline void
118cfs_expr_list_values_free(__u32 *values, int num)
119{
120
121
122
123 LIBCFS_FREE(values, num * sizeof(values[0]));
124}
125
126void cfs_expr_list_free(struct cfs_expr_list *expr_list);
127void cfs_expr_list_print(struct cfs_expr_list *expr_list);
128int cfs_expr_list_parse(char *str, int len, unsigned min, unsigned max,
129 struct cfs_expr_list **elpp);
130void cfs_expr_list_free_list(struct list_head *list);
131int cfs_ip_addr_parse(char *str, int len, struct list_head *list);
132int cfs_ip_addr_match(__u32 addr, struct list_head *list);
133void cfs_ip_addr_free(struct list_head *list);
134
135#define strtoul(str, endp, base) simple_strtoul(str, endp, base)
136
137#endif
138