Lines Matching defs:fg

58 alloc_pattern(fastgrep_t *fg, const char *pat)
62 fg->pattern = (unsigned char *)grep_strdup(pat);
65 for (i = 0; fg->pattern[i]; i++)
66 fg->pattern[i] = towupper((unsigned char)fg->pattern[i]);
70 map_pattern(fastgrep_t *fg, int hasDot)
75 fg->qsBc[i] = fg->len - hasDot;
76 for (i = hasDot + 1; i < fg->len; i++) {
77 unsigned char ch = fg->pattern[i];
79 fg->qsBc[ch] = fg->len - i;
82 fg->qsBc[ch] = fg->len - i;
87 fgrepcomp(fastgrep_t *fg, const char *pat)
90 fg->len = strlen(pat);
91 fg->bol = false;
92 fg->eol = false;
93 fg->reversed = false;
95 alloc_pattern(fg, pat);
98 map_pattern(fg, 0);
105 fastcomp(fastgrep_t *fg, const char *pat)
114 fg->len = strlen(pat);
115 fg->bol = false;
116 fg->eol = false;
117 fg->reversed = false;
118 fg->word = wflag;
121 if (fg->len > 0 && pat[fg->len - 1] == '$') {
122 fg->eol = true;
123 fg->len--;
128 fg->bol = true;
129 fg->len--;
133 if (fg->len >= 14 &&
135 memcmp(pat + fg->len - 7, "[[:>:]]", 7) == 0) {
136 fg->len -= 14;
139 fg->word = true;
147 alloc_pattern(fg, pat);
150 for (i = 0; i < fg->len; i++) {
152 if (fg->pattern[i] == '.') {
154 if (i < fg->len / 2) {
166 free(fg->pattern);
167 fg->pattern = NULL;
176 if ((!(lflag || cflag)) && ((!(fg->bol || fg->eol)) &&
178 ((fg->len - (lastHalfDot + 1)) < (size_t)firstHalfDot)))) &&
180 fg->reversed = true;
181 hasDot = fg->len - (firstHalfDot < 0 ?
183 grep_revstr(fg->pattern, fg->len);
206 map_pattern(fg, hasDot);
212 if (fg->reversed)
213 grep_revstr(fg->pattern, fg->len);
219 grep_search(fastgrep_t *fg, const unsigned char *data, size_t len, regmatch_t *pmatch)
227 if (fg->bol && pmatch->rm_so != 0) {
234 if (len < fg->len)
238 if (fg->bol || fg->eol) {
241 if (len >= fg->len) {
243 j = fg->eol ? len - fg->len : 0;
244 if (!((fg->bol && fg->eol) && (len != fg->len)))
245 if (grep_cmp(fg->pattern, data + j,
246 fg->len) == -1) {
248 pmatch->rm_eo = j + fg->len;
252 } else if (fg->reversed) {
256 if (grep_cmp(fg->pattern, data + j - fg->len,
257 fg->len) == -1) {
258 pmatch->rm_so = j - fg->len;
264 if (j == fg->len)
266 j -= fg->qsBc[data[j - fg->len - 1]];
267 } while (j >= fg->len);
272 if (grep_cmp(fg->pattern, data + j, fg->len) == -1) {
274 pmatch->rm_eo = j + fg->len;
280 if (j + fg->len == len)
283 j += fg->qsBc[data[j + fg->len]];
284 } while (j <= (len - fg->len));