mirror of
				https://git.proxmox.com/git/libgit2
				synced 2025-10-31 16:19:17 +00:00 
			
		
		
		
	config: don't write section header if we're in it
If we hit the EOF while trying to write a new value, it may be that we're already in the section that we were looking for. If so, do not write a (duplicate) section header, just write the value.
This commit is contained in:
		
							parent
							
								
									3e95bd36d9
								
							
						
					
					
						commit
						e25e1ca1b2
					
				| @ -1500,7 +1500,7 @@ static int config_parse( | ||||
| 	int (*on_section)(struct reader **reader, const char *current_section, const char *line, size_t line_len, void *data), | ||||
| 	int (*on_variable)(struct reader **reader, const char *current_section, char *var_name, char *var_value, const char *line, size_t line_len, void *data), | ||||
| 	int (*on_comment)(struct reader **reader, const char *line, size_t line_len, void *data), | ||||
| 	int (*on_eof)(struct reader **reader, void *data), | ||||
| 	int (*on_eof)(struct reader **reader, const char *current_section, void *data), | ||||
| 	void *data) | ||||
| { | ||||
| 	char *current_section = NULL, *var_name, *var_value, *line_start; | ||||
| @ -1551,7 +1551,7 @@ static int config_parse( | ||||
| 	} | ||||
| 
 | ||||
| 	if (on_eof) | ||||
| 		result = on_eof(&reader, data); | ||||
| 		result = on_eof(&reader, current_section, data); | ||||
| 
 | ||||
| 	git__free(current_section); | ||||
| 	return result; | ||||
| @ -1867,7 +1867,8 @@ static int write_on_comment(struct reader **reader, const char *line, size_t lin | ||||
| 	return write_line_to(&write_data->buffered_comment, line, line_len); | ||||
| } | ||||
| 
 | ||||
| static int write_on_eof(struct reader **reader, void *data) | ||||
| static int write_on_eof( | ||||
| 	struct reader **reader, const char *current_section, void *data) | ||||
| { | ||||
| 	struct write_data *write_data = (struct write_data *)data; | ||||
| 	int result = 0; | ||||
| @ -1886,7 +1887,11 @@ static int write_on_eof(struct reader **reader, void *data) | ||||
| 	 * value. | ||||
| 	 */ | ||||
| 	if ((!write_data->preg || !write_data->preg_replaced) && write_data->value) { | ||||
| 		if ((result = write_section(write_data->buf, write_data->section)) == 0) | ||||
| 		/* write the section header unless we're already in it */ | ||||
| 		if (!current_section || strcmp(current_section, write_data->section)) | ||||
| 			result = write_section(write_data->buf, write_data->section); | ||||
| 
 | ||||
| 		if (!result) | ||||
| 			result = write_value(write_data); | ||||
| 	} | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Edward Thomson
						Edward Thomson