fsck: give accurate error message on empty loose object files
Sincemaint3ba7a06552(A loose object is not corrupt if it cannot be read due to EMFILE), "git fsck" on a repository with an empty loose object file complains with the error message fatal: failed to read object <sha1>: Invalid argument This comes from a failure of mmap on this empty file, which sets errno to EINVAL. Instead of calling xmmap on empty file, we display a clean error message ourselves, and return a NULL pointer. The new message is error: object file .git/objects/09/<rest-of-sha1> is empty fatal: loose object <sha1> (stored in .git/objects/09/<rest-of-sha1>) is corrupt The second line was already there before the regression in3ba7a06552, and the first is an additional message, that should help diagnosing the problem for the user. Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr> Signed-off-by: Junio C Hamano <gitster@pobox.com>
							parent
							
								
									3ba7a06552
								
							
						
					
					
						commit
						33e42de0d2
					
				|  | @ -1070,6 +1070,11 @@ static void *map_sha1_file(const unsigned char *sha1, unsigned long *size) | ||||||
|  |  | ||||||
| 		if (!fstat(fd, &st)) { | 		if (!fstat(fd, &st)) { | ||||||
| 			*size = xsize_t(st.st_size); | 			*size = xsize_t(st.st_size); | ||||||
|  | 			if (!*size) { | ||||||
|  | 				/* mmap() is forbidden on empty files */ | ||||||
|  | 				error("object file %s is empty", sha1_file_name(sha1)); | ||||||
|  | 				return NULL; | ||||||
|  | 			} | ||||||
| 			map = xmmap(NULL, *size, PROT_READ, MAP_PRIVATE, fd, 0); | 			map = xmmap(NULL, *size, PROT_READ, MAP_PRIVATE, fd, 0); | ||||||
| 		} | 		} | ||||||
| 		close(fd); | 		close(fd); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Matthieu Moy
						Matthieu Moy