Add NO_C99_FORMAT to support older compilers.
The NO_C99_FORMAT macro allows compilers that lack support for the ll,hh,j,z,t size specifiers (eg. gcc 2.95.2) to adapt the code to avoid runtime errors in the formatted IO functions. Signed-off-by: Ramsay Allan Jones <ramsay@ramsay1.demon.co.uk> Signed-off-by: Junio C Hamano <junkio@cox.net>maint
							parent
							
								
									446c6faec6
								
							
						
					
					
						commit
						579d1fbfaf
					
				
							
								
								
									
										8
									
								
								Makefile
								
								
								
								
							
							
						
						
									
										8
									
								
								Makefile
								
								
								
								
							|  | @ -24,6 +24,11 @@ all: | ||||||
| # Define NO_D_TYPE_IN_DIRENT if your platform defines DT_UNKNOWN but lacks | # Define NO_D_TYPE_IN_DIRENT if your platform defines DT_UNKNOWN but lacks | ||||||
| # d_type in struct dirent (latest Cygwin -- will be fixed soonish). | # d_type in struct dirent (latest Cygwin -- will be fixed soonish). | ||||||
| # | # | ||||||
|  | # Define NO_C99_FORMAT if your formatted IO functions (printf/scanf et.al.) | ||||||
|  | # do not support the 'size specifiers' introduced by C99, namely ll, hh, | ||||||
|  | # j, z, t. (representing long long int, char, intmax_t, size_t, ptrdiff_t). | ||||||
|  | # some c compilers supported these specifiers prior to C99 as an extension. | ||||||
|  | # | ||||||
| # Define NO_STRCASESTR if you don't have strcasestr. | # Define NO_STRCASESTR if you don't have strcasestr. | ||||||
| # | # | ||||||
| # Define NO_STRLCPY if you don't have strlcpy. | # Define NO_STRLCPY if you don't have strlcpy. | ||||||
|  | @ -432,6 +437,9 @@ endif | ||||||
| ifdef NO_D_INO_IN_DIRENT | ifdef NO_D_INO_IN_DIRENT | ||||||
| 	ALL_CFLAGS += -DNO_D_INO_IN_DIRENT | 	ALL_CFLAGS += -DNO_D_INO_IN_DIRENT | ||||||
| endif | endif | ||||||
|  | ifdef NO_C99_FORMAT | ||||||
|  | 	ALL_CFLAGS += -DNO_C99_FORMAT | ||||||
|  | endif | ||||||
| ifdef NO_SYMLINK_HEAD | ifdef NO_SYMLINK_HEAD | ||||||
| 	ALL_CFLAGS += -DNO_SYMLINK_HEAD | 	ALL_CFLAGS += -DNO_SYMLINK_HEAD | ||||||
| endif | endif | ||||||
|  |  | ||||||
							
								
								
									
										15
									
								
								alloc.c
								
								
								
								
							
							
						
						
									
										15
									
								
								alloc.c
								
								
								
								
							|  | @ -39,8 +39,21 @@ DEFINE_ALLOCATOR(tree) | ||||||
| DEFINE_ALLOCATOR(commit) | DEFINE_ALLOCATOR(commit) | ||||||
| DEFINE_ALLOCATOR(tag) | DEFINE_ALLOCATOR(tag) | ||||||
|  |  | ||||||
|  | #ifdef NO_C99_FORMAT | ||||||
|  | #define SZ_FMT "%u" | ||||||
|  | #else | ||||||
|  | #define SZ_FMT "%zu" | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | static void report(const char* name, unsigned int count, size_t size) | ||||||
|  | { | ||||||
|  |     fprintf(stderr, "%10s: %8u (" SZ_FMT " kB)\n", name, count, size); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #undef SZ_FMT | ||||||
|  |  | ||||||
| #define REPORT(name)	\ | #define REPORT(name)	\ | ||||||
| 	fprintf(stderr, "%10s: %8u (%zu kB)\n", #name, name##_allocs, name##_allocs*sizeof(struct name) >> 10) |     report(#name, name##_allocs, name##_allocs*sizeof(struct name) >> 10) | ||||||
|  |  | ||||||
| void alloc_report(void) | void alloc_report(void) | ||||||
| { | { | ||||||
|  |  | ||||||
							
								
								
									
										18
									
								
								mktag.c
								
								
								
								
							
							
						
						
									
										18
									
								
								mktag.c
								
								
								
								
							|  | @ -39,6 +39,12 @@ static int verify_object(unsigned char *sha1, const char *expected_type) | ||||||
| 	return ret; | 	return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | #ifdef NO_C99_FORMAT | ||||||
|  | #define PD_FMT "%d" | ||||||
|  | #else | ||||||
|  | #define PD_FMT "%td" | ||||||
|  | #endif | ||||||
|  |  | ||||||
| static int verify_tag(char *buffer, unsigned long size) | static int verify_tag(char *buffer, unsigned long size) | ||||||
| { | { | ||||||
| 	int typelen; | 	int typelen; | ||||||
|  | @ -67,15 +73,15 @@ static int verify_tag(char *buffer, unsigned long size) | ||||||
| 	/* Verify tag-line */ | 	/* Verify tag-line */ | ||||||
| 	tag_line = strchr(type_line, '\n'); | 	tag_line = strchr(type_line, '\n'); | ||||||
| 	if (!tag_line) | 	if (!tag_line) | ||||||
| 		return error("char%td: could not find next \"\\n\"", type_line - buffer); | 		return error("char" PD_FMT ": could not find next \"\\n\"", type_line - buffer); | ||||||
| 	tag_line++; | 	tag_line++; | ||||||
| 	if (memcmp(tag_line, "tag ", 4) || tag_line[4] == '\n') | 	if (memcmp(tag_line, "tag ", 4) || tag_line[4] == '\n') | ||||||
| 		return error("char%td: no \"tag \" found", tag_line - buffer); | 		return error("char" PD_FMT ": no \"tag \" found", tag_line - buffer); | ||||||
|  |  | ||||||
| 	/* Get the actual type */ | 	/* Get the actual type */ | ||||||
| 	typelen = tag_line - type_line - strlen("type \n"); | 	typelen = tag_line - type_line - strlen("type \n"); | ||||||
| 	if (typelen >= sizeof(type)) | 	if (typelen >= sizeof(type)) | ||||||
| 		return error("char%td: type too long", type_line+5 - buffer); | 		return error("char" PD_FMT ": type too long", type_line+5 - buffer); | ||||||
|  |  | ||||||
| 	memcpy(type, type_line+5, typelen); | 	memcpy(type, type_line+5, typelen); | ||||||
| 	type[typelen] = 0; | 	type[typelen] = 0; | ||||||
|  | @ -92,14 +98,14 @@ static int verify_tag(char *buffer, unsigned long size) | ||||||
| 			break; | 			break; | ||||||
| 		if (c > ' ') | 		if (c > ' ') | ||||||
| 			continue; | 			continue; | ||||||
| 		return error("char%td: could not verify tag name", tag_line - buffer); | 		return error("char" PD_FMT ": could not verify tag name", tag_line - buffer); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	/* Verify the tagger line */ | 	/* Verify the tagger line */ | ||||||
| 	tagger_line = tag_line; | 	tagger_line = tag_line; | ||||||
|  |  | ||||||
| 	if (memcmp(tagger_line, "tagger", 6) || (tagger_line[6] == '\n')) | 	if (memcmp(tagger_line, "tagger", 6) || (tagger_line[6] == '\n')) | ||||||
| 		return error("char%td: could not find \"tagger\"", tagger_line - buffer); | 		return error("char" PD_FMT ": could not find \"tagger\"", tagger_line - buffer); | ||||||
|  |  | ||||||
| 	/* TODO: check for committer info + blank line? */ | 	/* TODO: check for committer info + blank line? */ | ||||||
| 	/* Also, the minimum length is probably + "tagger .", or 63+8=71 */ | 	/* Also, the minimum length is probably + "tagger .", or 63+8=71 */ | ||||||
|  | @ -108,6 +114,8 @@ static int verify_tag(char *buffer, unsigned long size) | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | #undef PD_FMT | ||||||
|  |  | ||||||
| int main(int argc, char **argv) | int main(int argc, char **argv) | ||||||
| { | { | ||||||
| 	unsigned long size = 4096; | 	unsigned long size = 4096; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Ramsay Allan Jones
						Ramsay Allan Jones