Lines Matching defs:rule

55 	struct subst_rule *rule;
66 rule = malloc(sizeof(*rule));
67 if (rule == NULL)
69 rule->next = NULL;
70 rule->result = NULL;
73 subst->first_rule = rule;
75 subst->last_rule->next = rule;
76 subst->last_rule = rule;
90 if ((r = regcomp(&rule->re, pattern, REG_BASIC)) != 0) {
92 regerror(r, &rule->re, buf, sizeof(buf));
102 rule->result = malloc(end_pattern - start_subst + 1);
103 if (rule->result == NULL)
105 memcpy(rule->result, start_subst, end_pattern - start_subst);
106 rule->result[end_pattern - start_subst] = '\0';
109 rule->global = 0; /* Don't do multiple replacements. */
110 rule->print = 0; /* Don't print. */
111 rule->regular = 1; /* Rewrite regular filenames. */
112 rule->symlink = 1; /* Rewrite symlink targets. */
113 rule->hardlink = 1; /* Rewrite hardlink targets. */
114 rule->from_begin = 0; /* Don't match from start. */
120 rule->from_begin = 1;
124 rule->global = 1;
127 rule->hardlink = 1;
130 rule->hardlink = 0;
134 rule->print = 1;
137 rule->regular = 1;
140 rule->regular = 0;
143 rule->symlink = 1;
146 rule->symlink = 0;
206 struct subst_rule *rule;
218 for (rule = subst->first_rule; rule != NULL; rule = rule->next) {
220 if (!rule->symlink)
223 if (!rule->hardlink)
226 if (!rule->regular)
230 if (rule->from_begin && *result) {
238 if (regexec(&rule->re, name, 10, matches, 0))
242 print_match |= rule->print;
245 for (i = 0, j = 0; rule->result[i] != '\0'; ++i) {
246 if (rule->result[i] == '~') {
247 realloc_strncat(result, rule->result + j, i - j);
254 if (rule->result[i] != '\\')
258 c = rule->result[i];
262 realloc_strncat(result, rule->result + j, i - j - 1);
274 realloc_strncat(result, rule->result + j, i - j - 1);
275 if ((size_t)(c - '0') > (size_t)(rule->re.re_nsub)) {
291 realloc_strcat(result, rule->result + j);
295 if (!rule->global)
314 struct subst_rule *rule;
320 while ((rule = subst->first_rule) != NULL) {
321 subst->first_rule = rule->next;
322 free(rule->result);
323 regfree(&rule->re);
324 free(rule);