sha1_to_hex() usage cleanup
Somebody on the #git channel complained that the sha1_to_hex() thing uses a static buffer which caused an error message to show the same hex output twice instead of showing two different ones. That's pretty easily rectified by making it uses a simple LRU of a few buffers, which also allows some other users (that were aware of the buffer re-use) to be written in a more straightforward manner. Signed-off-by: Linus Torvalds <torvalds@osdl.org> Signed-off-by: Junio C Hamano <junkio@cox.net>maint
							parent
							
								
									935e714204
								
							
						
					
					
						commit
						dcb3450fd8
					
				
							
								
								
									
										6
									
								
								diff.c
								
								
								
								
							
							
						
						
									
										6
									
								
								diff.c
								
								
								
								
							|  | @ -1018,14 +1018,12 @@ static void run_diff(struct diff_filepair *p, struct diff_options *o) | |||
| 	} | ||||
|  | ||||
| 	if (memcmp(one->sha1, two->sha1, 20)) { | ||||
| 		char one_sha1[41]; | ||||
| 		int abbrev = o->full_index ? 40 : DEFAULT_ABBREV; | ||||
| 		memcpy(one_sha1, sha1_to_hex(one->sha1), 41); | ||||
|  | ||||
| 		len += snprintf(msg + len, sizeof(msg) - len, | ||||
| 				"index %.*s..%.*s", | ||||
| 				abbrev, one_sha1, abbrev, | ||||
| 				sha1_to_hex(two->sha1)); | ||||
| 				abbrev, sha1_to_hex(one->sha1), | ||||
| 				abbrev, sha1_to_hex(two->sha1)); | ||||
| 		if (one->mode == two->mode) | ||||
| 			len += snprintf(msg + len, sizeof(msg) - len, | ||||
| 					" %06o", one->mode); | ||||
|  |  | |||
|  | @ -24,16 +24,14 @@ static const char *sha1_to_hex_zero(const unsigned char *sha1) | |||
|  | ||||
| static void resolve(const char *base, struct name_entry *branch1, struct name_entry *result) | ||||
| { | ||||
| 	char branch1_sha1[50]; | ||||
|  | ||||
| 	/* If it's already branch1, don't bother showing it */ | ||||
| 	if (!branch1) | ||||
| 		return; | ||||
| 	memcpy(branch1_sha1, sha1_to_hex_zero(branch1->sha1), 41); | ||||
|  | ||||
| 	printf("0 %06o->%06o %s->%s %s%s\n", | ||||
| 		branch1->mode, result->mode, | ||||
| 		branch1_sha1, sha1_to_hex_zero(result->sha1), | ||||
| 		sha1_to_hex_zero(branch1->sha1), | ||||
| 		sha1_to_hex_zero(result->sha1), | ||||
| 		base, result->path); | ||||
| } | ||||
|  | ||||
|  |  | |||
|  | @ -108,9 +108,10 @@ int safe_create_leading_directories(char *path) | |||
|  | ||||
| char * sha1_to_hex(const unsigned char *sha1) | ||||
| { | ||||
| 	static char buffer[50]; | ||||
| 	static int bufno; | ||||
| 	static char hexbuffer[4][50]; | ||||
| 	static const char hex[] = "0123456789abcdef"; | ||||
| 	char *buf = buffer; | ||||
| 	char *buffer = hexbuffer[3 & ++bufno], *buf = buffer; | ||||
| 	int i; | ||||
|  | ||||
| 	for (i = 0; i < 20; i++) { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Linus Torvalds
						Linus Torvalds