184
return NULL;
185
}
186
187
-static struct userdiff_driver *parse_driver(const char *var,
188
- const char *value, const char *type)
189
-{
190
- struct userdiff_driver *drv;
191
- const char *name, *key;
192
- int namelen;
193
-
194
- if (parse_config_key(var, "diff", &name, &namelen, &key) < 0 ||
195
- !name || strcmp(type, key))
196
- return NULL;
197
-
198
- drv = userdiff_find_by_namelen(name, namelen);
199
- if (!drv) {
200
- ALLOC_GROW(drivers, ndrivers+1, drivers_alloc);
201
- drv = &drivers[ndrivers++];
202
- memset(drv, 0, sizeof(*drv));
203
- drv->name = xmemdupz(name, namelen);
204
- drv->binary = -1;
205
- }
206
- return drv;
207
-}
208
-
187
static int parse_funcname(struct userdiff_funcname *f, const char *k,
188
const char *v, int cflags)
189
{
211
int userdiff_config(const char *k, const char *v)
212
{
213
struct userdiff_driver *drv;
214
+ const char *name, *type;
215
+ int namelen;
216
+
217
+ if (parse_config_key(k, "diff", &name, &namelen, &type) || !name)
218
+ return 0;
219
+
220
+ drv = userdiff_find_by_namelen(name, namelen);
221
+ if (!drv) {
222
+ ALLOC_GROW(drivers, ndrivers+1, drivers_alloc);
223
+ drv = &drivers[ndrivers++];
224
+ memset(drv, 0, sizeof(*drv));
225
+ drv->name = xmemdupz(name, namelen);
226
+ drv->binary = -1;
227
+ }
228
237
- if ((drv = parse_driver(k, v, "funcname")))
229
+ if (!strcmp(type, "funcname"))
230
return parse_funcname(&drv->funcname, k, v, 0);
239
- if ((drv = parse_driver(k, v, "xfuncname")))
231
+ if (!strcmp(type, "xfuncname"))
232
return parse_funcname(&drv->funcname, k, v, REG_EXTENDED);
241
- if ((drv = parse_driver(k, v, "binary")))
233
+ if (!strcmp(type, "binary"))
234
return parse_tristate(&drv->binary, k, v);
243
- if ((drv = parse_driver(k, v, "command")))
235
+ if (!strcmp(type, "command"))
236
return git_config_string(&drv->external, k, v);
245
- if ((drv = parse_driver(k, v, "textconv")))
237
+ if (!strcmp(type, "textconv"))
238
return git_config_string(&drv->textconv, k, v);
247
- if ((drv = parse_driver(k, v, "cachetextconv")))
239
+ if (!strcmp(type, "cachetextconv"))
240
return parse_bool(&drv->textconv_want_cache, k, v);
249
- if ((drv = parse_driver(k, v, "wordregex")))
241
+ if (!strcmp(type, "wordregex"))
242
return git_config_string(&drv->word_regex, k, v);
243
244
return 0;