Merge pull request #965 from davidben/format-attr
Annotate ColoredPrintf with the format attribute and fix bugs.
This commit is contained in:
		
						commit
						887d569eb0
					
				| @ -874,6 +874,23 @@ using ::std::tuple_size; | |||||||
| # define GTEST_ATTRIBUTE_UNUSED_ | # define GTEST_ATTRIBUTE_UNUSED_ | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | // Use this annotation before a function that takes a printf format string.
 | ||||||
|  | #if defined(__GNUC__) && !defined(COMPILER_ICC) | ||||||
|  | # if defined(__MINGW_PRINTF_FORMAT) | ||||||
|  | // MinGW has two different printf implementations. Ensure the format macro
 | ||||||
|  | // matches the selected implementation. See
 | ||||||
|  | // https://sourceforge.net/p/mingw-w64/wiki2/gnu%20printf/.
 | ||||||
|  | #  define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check) \ | ||||||
|  |        __attribute__((__format__(__MINGW_PRINTF_FORMAT, string_index, \ | ||||||
|  |                                  first_to_check))) | ||||||
|  | # else | ||||||
|  | #  define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check) \ | ||||||
|  |        __attribute__((__format__(__printf__, string_index, first_to_check))) | ||||||
|  | # endif | ||||||
|  | #else | ||||||
|  | # define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check) | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| // A macro to disallow operator=
 | // A macro to disallow operator=
 | ||||||
| // This should be used in the private: declarations for a class.
 | // This should be used in the private: declarations for a class.
 | ||||||
| #define GTEST_DISALLOW_ASSIGN_(type)\ | #define GTEST_DISALLOW_ASSIGN_(type)\ | ||||||
|  | |||||||
| @ -2953,6 +2953,7 @@ bool ShouldUseColor(bool stdout_is_tty) { | |||||||
| // cannot simply emit special characters and have the terminal change colors.
 | // cannot simply emit special characters and have the terminal change colors.
 | ||||||
| // This routine must actually emit the characters rather than return a string
 | // This routine must actually emit the characters rather than return a string
 | ||||||
| // that would be colored when printed, as can be done on Linux.
 | // that would be colored when printed, as can be done on Linux.
 | ||||||
|  | GTEST_ATTRIBUTE_PRINTF_(2, 3) | ||||||
| void ColoredPrintf(GTestColor color, const char* fmt, ...) { | void ColoredPrintf(GTestColor color, const char* fmt, ...) { | ||||||
|   va_list args; |   va_list args; | ||||||
|   va_start(args, fmt); |   va_start(args, fmt); | ||||||
| @ -4729,7 +4730,7 @@ bool ShouldShard(const char* total_shards_env, | |||||||
|       << "Invalid environment variables: you have " |       << "Invalid environment variables: you have " | ||||||
|       << kTestShardIndex << " = " << shard_index |       << kTestShardIndex << " = " << shard_index | ||||||
|       << ", but have left " << kTestTotalShards << " unset.\n"; |       << ", but have left " << kTestTotalShards << " unset.\n"; | ||||||
|     ColoredPrintf(COLOR_RED, msg.GetString().c_str()); |     ColoredPrintf(COLOR_RED, "%s", msg.GetString().c_str()); | ||||||
|     fflush(stdout); |     fflush(stdout); | ||||||
|     exit(EXIT_FAILURE); |     exit(EXIT_FAILURE); | ||||||
|   } else if (total_shards != -1 && shard_index == -1) { |   } else if (total_shards != -1 && shard_index == -1) { | ||||||
| @ -4737,7 +4738,7 @@ bool ShouldShard(const char* total_shards_env, | |||||||
|       << "Invalid environment variables: you have " |       << "Invalid environment variables: you have " | ||||||
|       << kTestTotalShards << " = " << total_shards |       << kTestTotalShards << " = " << total_shards | ||||||
|       << ", but have left " << kTestShardIndex << " unset.\n"; |       << ", but have left " << kTestShardIndex << " unset.\n"; | ||||||
|     ColoredPrintf(COLOR_RED, msg.GetString().c_str()); |     ColoredPrintf(COLOR_RED, "%s", msg.GetString().c_str()); | ||||||
|     fflush(stdout); |     fflush(stdout); | ||||||
|     exit(EXIT_FAILURE); |     exit(EXIT_FAILURE); | ||||||
|   } else if (shard_index < 0 || shard_index >= total_shards) { |   } else if (shard_index < 0 || shard_index >= total_shards) { | ||||||
| @ -4746,7 +4747,7 @@ bool ShouldShard(const char* total_shards_env, | |||||||
|       << kTestShardIndex << " < " << kTestTotalShards |       << kTestShardIndex << " < " << kTestTotalShards | ||||||
|       << ", but you have " << kTestShardIndex << "=" << shard_index |       << ", but you have " << kTestShardIndex << "=" << shard_index | ||||||
|       << ", " << kTestTotalShards << "=" << total_shards << ".\n"; |       << ", " << kTestTotalShards << "=" << total_shards << ".\n"; | ||||||
|     ColoredPrintf(COLOR_RED, msg.GetString().c_str()); |     ColoredPrintf(COLOR_RED, "%s", msg.GetString().c_str()); | ||||||
|     fflush(stdout); |     fflush(stdout); | ||||||
|     exit(EXIT_FAILURE); |     exit(EXIT_FAILURE); | ||||||
|   } |   } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user