mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	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. Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
This commit is contained in:
		
							parent
							
								
									8499f2dd57
								
							
						
					
					
						commit
						57ddd07c45
					
				
					 1 changed files with 57 additions and 37 deletions
				
			
		|  | @ -1058,13 +1058,53 @@ static int conf_touch_deps(void) | |||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static int __conf_write_autoconf(const char *filename, | ||||
| 				 void (*print_symbol)(FILE *, struct symbol *), | ||||
| 				 const struct comment_style *comment_style) | ||||
| { | ||||
| 	char tmp[PATH_MAX]; | ||||
| 	FILE *file; | ||||
| 	struct symbol *sym; | ||||
| 	int ret, i; | ||||
| 
 | ||||
| 	if (make_parent_dir(filename)) | ||||
| 		return -1; | ||||
| 
 | ||||
| 	ret = snprintf(tmp, sizeof(tmp), "%s.tmp", filename); | ||||
| 	if (ret >= sizeof(tmp)) /* check truncation */ | ||||
| 		return -1; | ||||
| 
 | ||||
| 	file = fopen(tmp, "w"); | ||||
| 	if (!file) { | ||||
| 		perror("fopen"); | ||||
| 		return -1; | ||||
| 	} | ||||
| 
 | ||||
| 	conf_write_heading(file, comment_style); | ||||
| 
 | ||||
| 	for_all_symbols(i, sym) | ||||
| 		if ((sym->flags & SYMBOL_WRITE) && sym->name) | ||||
| 			print_symbol(file, sym); | ||||
| 
 | ||||
| 	/* check possible errors in conf_write_heading() and print_symbol() */ | ||||
| 	if (ferror(file)) | ||||
| 		return -1; | ||||
| 
 | ||||
| 	fclose(file); | ||||
| 
 | ||||
| 	if (rename(tmp, filename)) { | ||||
| 		perror("rename"); | ||||
| 		return -1; | ||||
| 	} | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| int conf_write_autoconf(int overwrite) | ||||
| { | ||||
| 	struct symbol *sym; | ||||
| 	const char *name; | ||||
| 	const char *autoconf_name = conf_get_autoconfig_name(); | ||||
| 	FILE *out, *out_h; | ||||
| 	int i; | ||||
| 	int ret, i; | ||||
| 
 | ||||
| 	if (!overwrite && is_present(autoconf_name)) | ||||
| 		return 0; | ||||
|  | @ -1074,45 +1114,25 @@ int conf_write_autoconf(int overwrite) | |||
| 	if (conf_touch_deps()) | ||||
| 		return 1; | ||||
| 
 | ||||
| 	out = fopen(".tmpconfig", "w"); | ||||
| 	if (!out) | ||||
| 		return 1; | ||||
| 
 | ||||
| 	out_h = fopen(".tmpconfig.h", "w"); | ||||
| 	if (!out_h) { | ||||
| 		fclose(out); | ||||
| 		return 1; | ||||
| 	} | ||||
| 
 | ||||
| 	conf_write_heading(out, &comment_style_pound); | ||||
| 	conf_write_heading(out_h, &comment_style_c); | ||||
| 
 | ||||
| 	for_all_symbols(i, sym) { | ||||
| 	for_all_symbols(i, sym) | ||||
| 		sym_calc_value(sym); | ||||
| 		if (!(sym->flags & SYMBOL_WRITE) || !sym->name) | ||||
| 			continue; | ||||
| 
 | ||||
| 		/* write symbols to auto.conf and autoconf.h */ | ||||
| 		print_symbol_for_autoconf(out, sym); | ||||
| 		print_symbol_for_c(out_h, sym); | ||||
| 	} | ||||
| 	fclose(out); | ||||
| 	fclose(out_h); | ||||
| 	ret = __conf_write_autoconf(conf_get_autoheader_name(), | ||||
| 				    print_symbol_for_c, | ||||
| 				    &comment_style_c); | ||||
| 	if (ret) | ||||
| 		return ret; | ||||
| 
 | ||||
| 	name = conf_get_autoheader_name(); | ||||
| 	if (make_parent_dir(name)) | ||||
| 		return 1; | ||||
| 	if (rename(".tmpconfig.h", name)) | ||||
| 		return 1; | ||||
| 
 | ||||
| 	if (make_parent_dir(autoconf_name)) | ||||
| 		return 1; | ||||
| 	/*
 | ||||
| 	 * This must be the last step, kbuild has a dependency on auto.conf | ||||
| 	 * and this marks the successful completion of the previous steps. | ||||
| 	 * Create include/config/auto.conf. This must be the last step because | ||||
| 	 * Kbuild has a dependency on auto.conf and this marks the successful | ||||
| 	 * completion of the previous steps. | ||||
| 	 */ | ||||
| 	if (rename(".tmpconfig", autoconf_name)) | ||||
| 		return 1; | ||||
| 	ret = __conf_write_autoconf(conf_get_autoconfig_name(), | ||||
| 				    print_symbol_for_autoconf, | ||||
| 				    &comment_style_pound); | ||||
| 	if (ret) | ||||
| 		return ret; | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Masahiro Yamada
						Masahiro Yamada