Prior to this commit, starting nconfig, xconfig or gconfig, and saving the .config file more than once caused data loss, where a .config file that contained only comments would be written to disk starting from the second save operation. This bug manifests itself because the SYMBOL_WRITTEN flag is never cleared after the first call to conf_write, and subsequent calls to conf_write then skip all of the configuration symbols due to the SYMBOL_WRITTEN flag being set. This commit resolves this issue by clearing the SYMBOL_WRITTEN flag from all symbols before conf_write returns.
Showing the changes to scripts (1 of 1 file). Show all
Unified · Split
| @@ -848,6 +848,7 @@ int conf_write(const char *name) · 847 unmodified lines | ||
| 848 | 848 | const char *str; |
| 849 | 849 | char tmpname[PATH_MAX + 1], oldname[PATH_MAX + 1]; |
| 850 | 850 | char *env; |
| 851 | + int i; | |
| 851 | 852 | bool need_newline = false; |
| 852 | 853 | |
| 853 | 854 | if (!name) |
| @@ -930,6 +931,9 @@ next: · 76 unmodified lines | ||
| 930 | 931 | } |
| 931 | 932 | fclose(out); |
| 932 | 933 | |
| 934 | + for_all_symbols(i, sym) | |
| 935 | + sym->flags &= ~SYMBOL_WRITTEN; | |
| 936 | + | |
| 933 | 937 | if (*tmpname) { |
| 934 | 938 | if (is_same(name, tmpname)) { |
| 935 | 939 | conf_message("No change to %s", name); |