Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

kconfig: deduplicate code in conf_read_simple()

Kconfig accepts both "# CONFIG_FOO is not set" and "CONFIG_FOO=n" as
a valid input, but conf_read_simple() duplicates similar code to handle
them. Factor out the common code.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>

+35 -54
+35 -54
scripts/kconfig/confdata.c
··· 342 342 FILE *in = NULL; 343 343 char *line = NULL; 344 344 size_t line_asize = 0; 345 - char *p, *p2; 345 + char *p, *p2, *val; 346 346 struct symbol *sym; 347 347 int i, def_flags; 348 - const char *warn_unknown; 349 - const char *werror; 348 + const char *warn_unknown, *werror, *sym_name; 350 349 351 350 warn_unknown = getenv("KCONFIG_WARN_UNKNOWN_SYMBOLS"); 352 351 werror = getenv("KCONFIG_WERROR"); ··· 423 424 424 425 while (compat_getline(&line, &line_asize, in) != -1) { 425 426 conf_lineno++; 426 - sym = NULL; 427 427 if (line[0] == '#') { 428 428 if (line[1] != ' ') 429 429 continue; 430 - if (memcmp(line + 2, CONFIG_, strlen(CONFIG_))) 430 + p = line + 2; 431 + if (memcmp(p, CONFIG_, strlen(CONFIG_))) 431 432 continue; 432 - p = strchr(line + 2 + strlen(CONFIG_), ' '); 433 + sym_name = p + strlen(CONFIG_); 434 + p = strchr(sym_name, ' '); 433 435 if (!p) 434 436 continue; 435 437 *p++ = 0; 436 438 if (strncmp(p, "is not set", 10)) 437 439 continue; 438 440 439 - sym = sym_find(line + 2 + strlen(CONFIG_)); 440 - if (!sym) { 441 - if (warn_unknown) 442 - conf_warning("unknown symbol: %s", 443 - line + 2 + strlen(CONFIG_)); 444 - 445 - conf_set_changed(true); 446 - continue; 447 - } 448 - if (sym->flags & def_flags) { 449 - conf_warning("override: reassigning to symbol %s", sym->name); 450 - } 451 - switch (sym->type) { 452 - case S_BOOLEAN: 453 - case S_TRISTATE: 454 - sym->def[def].tri = no; 455 - sym->flags |= def_flags; 456 - break; 457 - default: 458 - ; 459 - } 441 + val = "n"; 460 442 } else if (memcmp(line, CONFIG_, strlen(CONFIG_)) == 0) { 461 - p = strchr(line + strlen(CONFIG_), '='); 443 + sym_name = line + strlen(CONFIG_); 444 + p = strchr(sym_name, '='); 462 445 if (!p) 463 446 continue; 464 447 *p++ = 0; 448 + val = p; 465 449 p2 = strchr(p, '\n'); 466 450 if (p2) { 467 451 *p2-- = 0; 468 452 if (*p2 == '\r') 469 453 *p2 = 0; 470 454 } 471 - 472 - sym = sym_find(line + strlen(CONFIG_)); 473 - if (!sym) { 474 - if (def == S_DEF_AUTO) { 475 - /* 476 - * Reading from include/config/auto.conf 477 - * If CONFIG_FOO previously existed in 478 - * auto.conf but it is missing now, 479 - * include/config/FOO must be touched. 480 - */ 481 - conf_touch_dep(line + strlen(CONFIG_)); 482 - } else { 483 - if (warn_unknown) 484 - conf_warning("unknown symbol: %s", 485 - line + strlen(CONFIG_)); 486 - 487 - conf_set_changed(true); 488 - } 489 - continue; 490 - } 491 - 492 - if (sym->flags & def_flags) { 493 - conf_warning("override: reassigning to symbol %s", sym->name); 494 - } 495 - if (conf_set_sym_val(sym, def, def_flags, p)) 496 - continue; 497 455 } else { 498 456 if (line[0] != '\r' && line[0] != '\n') 499 457 conf_warning("unexpected data: %.*s", ··· 458 502 459 503 continue; 460 504 } 505 + 506 + sym = sym_find(sym_name); 507 + if (!sym) { 508 + if (def == S_DEF_AUTO) { 509 + /* 510 + * Reading from include/config/auto.conf. 511 + * If CONFIG_FOO previously existed in auto.conf 512 + * but it is missing now, include/config/FOO 513 + * must be touched. 514 + */ 515 + conf_touch_dep(sym_name); 516 + } else { 517 + if (warn_unknown) 518 + conf_warning("unknown symbol: %s", sym_name); 519 + 520 + conf_set_changed(true); 521 + } 522 + continue; 523 + } 524 + 525 + if (sym->flags & def_flags) 526 + conf_warning("override: reassigning to symbol %s", sym->name); 527 + 528 + if (conf_set_sym_val(sym, def, def_flags, val)) 529 + continue; 461 530 462 531 if (sym && sym_is_choice_value(sym)) { 463 532 struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym));