Lines Matching defs:rule

72 	struct subst_rule *rule;
83 rule = malloc(sizeof(*rule));
84 if (rule == NULL)
86 rule->next = NULL;
87 rule->result = NULL;
90 subst->first_rule = rule;
92 subst->last_rule->next = rule;
93 subst->last_rule = rule;
107 if ((r = regcomp(&rule->re, pattern, REG_BASIC)) != 0) {
109 regerror(r, &rule->re, buf, sizeof(buf));
119 rule->result = malloc(end_pattern - start_subst + 1);
120 if (rule->result == NULL)
122 memcpy(rule->result, start_subst, end_pattern - start_subst);
123 rule->result[end_pattern - start_subst] = '\0';
126 rule->global = 0; /* Don't do multiple replacements. */
127 rule->print = 0; /* Don't print. */
128 rule->regular = 1; /* Rewrite regular filenames. */
129 rule->symlink = 1; /* Rewrite symlink targets. */
130 rule->hardlink = 1; /* Rewrite hardlink targets. */
136 rule->global = 1;
139 rule->hardlink = 1;
142 rule->hardlink = 0;
146 rule->print = 1;
149 rule->regular = 1;
152 rule->regular = 0;
155 rule->symlink = 1;
158 rule->symlink = 0;
216 struct subst_rule *rule;
228 for (rule = subst->first_rule; rule != NULL; rule = rule->next) {
230 if (!rule->symlink)
233 if (!rule->hardlink)
236 if (!rule->regular)
241 if (regexec(&rule->re, name, 10, matches, 0))
245 print_match |= rule->print;
248 for (i = 0, j = 0; rule->result[i] != '\0'; ++i) {
249 if (rule->result[i] == '~') {
250 realloc_strncat(result, rule->result + j, i - j);
257 if (rule->result[i] != '\\')
261 c = rule->result[i];
265 realloc_strncat(result, rule->result + j, i - j - 1);
277 realloc_strncat(result, rule->result + j, i - j - 1);
278 if ((size_t)(c - '0') > (size_t)(rule->re.re_nsub)) {
293 realloc_strcat(result, rule->result + j);
297 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 free(rule);