Commit 49192f266ffa187bd7adaf5c2d881f85bd53e0ed

Authored by Sam Ravnborg
Committed by Michal Marek
1 parent c252147de6

kconfig: code refactoring in confdata.c

Add a a few local functions to avoid some code duplication
No functional changes.

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Signed-off-by: Michal Marek <mmarek@suse.cz>

Showing 1 changed file with 70 additions and 67 deletions Side-by-side Diff

scripts/kconfig/confdata.c
... ... @@ -399,15 +399,73 @@
399 399 return 0;
400 400 }
401 401  
  402 +/* Write a S_STRING */
  403 +static void conf_write_string(bool headerfile, const char *name,
  404 + const char *str, FILE *out)
  405 +{
  406 + int l;
  407 + if (headerfile)
  408 + fprintf(out, "#define CONFIG_%s \"", name);
  409 + else
  410 + fprintf(out, "CONFIG_%s=\"", name);
  411 +
  412 + while (1) {
  413 + l = strcspn(str, "\"\\");
  414 + if (l) {
  415 + fwrite(str, l, 1, out);
  416 + str += l;
  417 + }
  418 + if (!*str)
  419 + break;
  420 + fprintf(out, "\\%c", *str++);
  421 + }
  422 + fputs("\"\n", out);
  423 +}
  424 +
  425 +static void conf_write_symbol(struct symbol *sym, enum symbol_type type,
  426 + FILE *out, bool write_no)
  427 +{
  428 + const char *str;
  429 +
  430 + switch (type) {
  431 + case S_BOOLEAN:
  432 + case S_TRISTATE:
  433 + switch (sym_get_tristate_value(sym)) {
  434 + case no:
  435 + if (write_no)
  436 + fprintf(out, "# CONFIG_%s is not set\n", sym->name);
  437 + break;
  438 + case mod:
  439 + fprintf(out, "CONFIG_%s=m\n", sym->name);
  440 + break;
  441 + case yes:
  442 + fprintf(out, "CONFIG_%s=y\n", sym->name);
  443 + break;
  444 + }
  445 + break;
  446 + case S_STRING:
  447 + conf_write_string(false, sym->name, sym_get_string_value(sym), out);
  448 + break;
  449 + case S_HEX:
  450 + case S_INT:
  451 + str = sym_get_string_value(sym);
  452 + fprintf(out, "CONFIG_%s=%s\n", sym->name, str);
  453 + break;
  454 + case S_OTHER:
  455 + case S_UNKNOWN:
  456 + break;
  457 + }
  458 +}
  459 +
402 460 int conf_write(const char *name)
403 461 {
404 462 FILE *out;
405 463 struct symbol *sym;
406 464 struct menu *menu;
407 465 const char *basename;
408   - char dirname[128], tmpname[128], newname[128];
409   - int type, l;
410 466 const char *str;
  467 + char dirname[128], tmpname[128], newname[128];
  468 + enum symbol_type type;
411 469 time_t now;
412 470 int use_timestamp = 1;
413 471 char *env;
414 472  
... ... @@ -487,50 +545,11 @@
487 545 if (modules_sym->curr.tri == no)
488 546 type = S_BOOLEAN;
489 547 }
490   - switch (type) {
491   - case S_BOOLEAN:
492   - case S_TRISTATE:
493   - switch (sym_get_tristate_value(sym)) {
494   - case no:
495   - fprintf(out, "# CONFIG_%s is not set\n", sym->name);
496   - break;
497   - case mod:
498   - fprintf(out, "CONFIG_%s=m\n", sym->name);
499   - break;
500   - case yes:
501   - fprintf(out, "CONFIG_%s=y\n", sym->name);
502   - break;
503   - }
504   - break;
505   - case S_STRING:
506   - str = sym_get_string_value(sym);
507   - fprintf(out, "CONFIG_%s=\"", sym->name);
508   - while (1) {
509   - l = strcspn(str, "\"\\");
510   - if (l) {
511   - fwrite(str, l, 1, out);
512   - str += l;
513   - }
514   - if (!*str)
515   - break;
516   - fprintf(out, "\\%c", *str++);
517   - }
518   - fputs("\"\n", out);
519   - break;
520   - case S_HEX:
521   - str = sym_get_string_value(sym);
522   - if (str[0] != '0' || (str[1] != 'x' && str[1] != 'X')) {
523   - fprintf(out, "CONFIG_%s=%s\n", sym->name, str);
524   - break;
525   - }
526   - case S_INT:
527   - str = sym_get_string_value(sym);
528   - fprintf(out, "CONFIG_%s=%s\n", sym->name, str);
529   - break;
530   - }
  548 + /* Write config symbol to file */
  549 + conf_write_symbol(sym, type, out, true);
531 550 }
532 551  
533   - next:
  552 +next:
534 553 if (menu->list) {
535 554 menu = menu->list;
536 555 continue;
... ... @@ -682,7 +701,7 @@
682 701 const char *name;
683 702 FILE *out, *tristate, *out_h;
684 703 time_t now;
685   - int i, l;
  704 + int i;
686 705  
687 706 sym_clear_all_valid();
688 707  
... ... @@ -732,6 +751,11 @@
732 751 sym_calc_value(sym);
733 752 if (!(sym->flags & SYMBOL_WRITE) || !sym->name)
734 753 continue;
  754 +
  755 + /* write symbol to config file */
  756 + conf_write_symbol(sym, sym->type, out, false);
  757 +
  758 + /* update autoconf and tristate files */
735 759 switch (sym->type) {
736 760 case S_BOOLEAN:
737 761 case S_TRISTATE:
738 762  
... ... @@ -739,12 +763,10 @@
739 763 case no:
740 764 break;
741 765 case mod:
742   - fprintf(out, "CONFIG_%s=m\n", sym->name);
743 766 fprintf(tristate, "CONFIG_%s=M\n", sym->name);
744 767 fprintf(out_h, "#define CONFIG_%s_MODULE 1\n", sym->name);
745 768 break;
746 769 case yes:
747   - fprintf(out, "CONFIG_%s=y\n", sym->name);
748 770 if (sym->type == S_TRISTATE)
749 771 fprintf(tristate, "CONFIG_%s=Y\n",
750 772 sym->name);
751 773  
752 774  
... ... @@ -753,35 +775,16 @@
753 775 }
754 776 break;
755 777 case S_STRING:
756   - str = sym_get_string_value(sym);
757   - fprintf(out, "CONFIG_%s=\"", sym->name);
758   - fprintf(out_h, "#define CONFIG_%s \"", sym->name);
759   - while (1) {
760   - l = strcspn(str, "\"\\");
761   - if (l) {
762   - fwrite(str, l, 1, out);
763   - fwrite(str, l, 1, out_h);
764   - str += l;
765   - }
766   - if (!*str)
767   - break;
768   - fprintf(out, "\\%c", *str);
769   - fprintf(out_h, "\\%c", *str);
770   - str++;
771   - }
772   - fputs("\"\n", out);
773   - fputs("\"\n", out_h);
  778 + conf_write_string(true, sym->name, sym_get_string_value(sym), out_h);
774 779 break;
775 780 case S_HEX:
776 781 str = sym_get_string_value(sym);
777 782 if (str[0] != '0' || (str[1] != 'x' && str[1] != 'X')) {
778   - fprintf(out, "CONFIG_%s=%s\n", sym->name, str);
779 783 fprintf(out_h, "#define CONFIG_%s 0x%s\n", sym->name, str);
780 784 break;
781 785 }
782 786 case S_INT:
783 787 str = sym_get_string_value(sym);
784   - fprintf(out, "CONFIG_%s=%s\n", sym->name, str);
785 788 fprintf(out_h, "#define CONFIG_%s %s\n", sym->name, str);
786 789 break;
787 790 default: