History

kconfig: refactor conf_write_autoconf()

This function does similar for auto.conf and autoconf.h Create __conf_write_autoconf() helper to factor out the common code.

Masahiro Yamada committed 5 years ago

Commit 57ddd071 parent 8499f2d1 file · +57 −37Browse files

Showing the changes to scripts (1 of 1 file). Show all

Unified · Split

scripts/kconfig/confdata.c+57−37
@@ -1058,13 +1058,53 @@ static int conf_touch_deps(void) · 1057 unmodified lines
1058 return 0;1058 return 0;
1059}1059}
1060 1060
1061static int __conf_write_autoconf(const char *filename,
1062 void (*print_symbol)(FILE *, struct symbol *),
1063 const struct comment_style *comment_style)
1064{
1065 char tmp[PATH_MAX];
1066 FILE *file;
1067 struct symbol *sym;
1068 int ret, i;
1069
1070 if (make_parent_dir(filename))
1071 return -1;
1072
1073 ret = snprintf(tmp, sizeof(tmp), "%s.tmp", filename);
1074 if (ret >= sizeof(tmp)) /* check truncation */
1075 return -1;
1076
1077 file = fopen(tmp, "w");
1078 if (!file) {
1079 perror("fopen");
1080 return -1;
1081 }
1082
1083 conf_write_heading(file, comment_style);
1084
1085 for_all_symbols(i, sym)
1086 if ((sym->flags & SYMBOL_WRITE) && sym->name)
1087 print_symbol(file, sym);
1088
1089 /* check possible errors in conf_write_heading() and print_symbol() */
1090 if (ferror(file))
1091 return -1;
1092
1093 fclose(file);
1094
1095 if (rename(tmp, filename)) {
1096 perror("rename");
1097 return -1;
1098 }
1099
1100 return 0;
1101}
1102
1061int conf_write_autoconf(int overwrite)1103int conf_write_autoconf(int overwrite)
1062{1104{
1063 struct symbol *sym;1105 struct symbol *sym;
1064 const char *name;
1065 const char *autoconf_name = conf_get_autoconfig_name();1106 const char *autoconf_name = conf_get_autoconfig_name();
1066 FILE *out, *out_h;1107 int ret, i;
1067 int i;
1068 1108
1069 if (!overwrite && is_present(autoconf_name))1109 if (!overwrite && is_present(autoconf_name))
1070 return 0;1110 return 0;
@@ -1074,45 +1114,25 @@ int conf_write_autoconf(int overwrite) · 3 unmodified lines
1074 if (conf_touch_deps())1114 if (conf_touch_deps())
1075 return 1;1115 return 1;
1076 1116
1077 out = fopen(".tmpconfig", "w");1117 for_all_symbols(i, sym)
1078 if (!out)
1079 return 1;
1080
1081 out_h = fopen(".tmpconfig.h", "w");
1082 if (!out_h) {
1083 fclose(out);
1084 return 1;
1085 }
1086
1087 conf_write_heading(out, &comment_style_pound);
1088 conf_write_heading(out_h, &comment_style_c);
1089
1090 for_all_symbols(i, sym) {
1091 sym_calc_value(sym);1118 sym_calc_value(sym);
1092 if (!(sym->flags & SYMBOL_WRITE) || !sym->name)
1093 continue;
1094 1119
1095 /* write symbols to auto.conf and autoconf.h */1120 ret = __conf_write_autoconf(conf_get_autoheader_name(),
1096 print_symbol_for_autoconf(out, sym);1121 print_symbol_for_c,
1097 print_symbol_for_c(out_h, sym);1122 &comment_style_c);
1098 }1123 if (ret)
1099 fclose(out);1124 return ret;
1100 fclose(out_h);
1101
1102 name = conf_get_autoheader_name();
1103 if (make_parent_dir(name))
1104 return 1;
1105 if (rename(".tmpconfig.h", name))
1106 return 1;
1107 1125
1108 if (make_parent_dir(autoconf_name))
1109 return 1;
1110 /*1126 /*
1111 * This must be the last step, kbuild has a dependency on auto.conf1127 * Create include/config/auto.conf. This must be the last step because
1112 * and this marks the successful completion of the previous steps.1128 * Kbuild has a dependency on auto.conf and this marks the successful
1129 * completion of the previous steps.
1113 */1130 */
1114 if (rename(".tmpconfig", autoconf_name))1131 ret = __conf_write_autoconf(conf_get_autoconfig_name(),
1115 return 1;1132 print_symbol_for_autoconf,
1133 &comment_style_pound);
1134 if (ret)
1135 return ret;
1116 1136
1117 return 0;1137 return 0;
1118}1138}