|  | @@ -39,21 +39,32 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
 | 
		
	
		
			
			| 39 | 39 |  /**
 | 
		
	
		
			
			| 40 | 40 |   * Report an snprintf() test result
 | 
		
	
		
			
			| 41 | 41 |   *
 | 
		
	
		
			
			|  | 42 | + * @v len		Buffer length
 | 
		
	
		
			
			|  | 43 | + * @v expected		Expected result
 | 
		
	
		
			
			|  | 44 | + * @v file		Test code file
 | 
		
	
		
			
			|  | 45 | + * @v line		Test code line
 | 
		
	
		
			
			|  | 46 | + * @v format		Format string
 | 
		
	
		
			
			|  | 47 | + * @v ...		Arguments
 | 
		
	
		
			
			| 42 | 48 |   */
 | 
		
	
		
			
			| 43 |  | -#define snprintf_ok( len, result, format, ... ) do {			\
 | 
		
	
		
			
			| 44 |  | -	char actual[ (len) ];						\
 | 
		
	
		
			
			| 45 |  | -	const char expected[] = result;					\
 | 
		
	
		
			
			| 46 |  | -	size_t actual_len;						\
 | 
		
	
		
			
			| 47 |  | -									\
 | 
		
	
		
			
			| 48 |  | -	actual_len = snprintf ( actual, sizeof ( actual ),		\
 | 
		
	
		
			
			| 49 |  | -				format, ##__VA_ARGS__ );		\
 | 
		
	
		
			
			| 50 |  | -	ok ( actual_len >= strlen ( result ) );				\
 | 
		
	
		
			
			| 51 |  | -	ok ( strcmp ( actual, expected ) == 0 );			\
 | 
		
	
		
			
			| 52 |  | -	if ( strcmp ( actual, expected ) != 0 ) {			\
 | 
		
	
		
			
			| 53 |  | -		DBG ( "SNPRINTF expected \"%s\", got \"%s\"\n",		\
 | 
		
	
		
			
			| 54 |  | -		      expected, actual );				\
 | 
		
	
		
			
			| 55 |  | -	}								\
 | 
		
	
		
			
			| 56 |  | -	} while ( 0 )
 | 
		
	
		
			
			|  | 49 | +static void snprintf_okx ( size_t len, const char *expected, const char *file,
 | 
		
	
		
			
			|  | 50 | +			   unsigned int line, const char *fmt, ... ) {
 | 
		
	
		
			
			|  | 51 | +	char actual[len];
 | 
		
	
		
			
			|  | 52 | +	size_t actual_len;
 | 
		
	
		
			
			|  | 53 | +	va_list args;
 | 
		
	
		
			
			|  | 54 | +
 | 
		
	
		
			
			|  | 55 | +	va_start ( args, fmt );
 | 
		
	
		
			
			|  | 56 | +	actual_len = vsnprintf ( actual, sizeof ( actual ), fmt, args );
 | 
		
	
		
			
			|  | 57 | +	va_end ( args );
 | 
		
	
		
			
			|  | 58 | +	okx ( actual_len >= strlen ( expected ), file, line );
 | 
		
	
		
			
			|  | 59 | +	okx ( strcmp ( actual, expected ) == 0, file, line );
 | 
		
	
		
			
			|  | 60 | +	if ( strcmp ( actual, expected ) != 0 ) {
 | 
		
	
		
			
			|  | 61 | +		DBG ( "SNPRINTF expected \"%s\", got \"%s\"\n",
 | 
		
	
		
			
			|  | 62 | +		      expected, actual );
 | 
		
	
		
			
			|  | 63 | +	}
 | 
		
	
		
			
			|  | 64 | +}
 | 
		
	
		
			
			|  | 65 | +#define snprintf_ok( len, result, format, ... )				\
 | 
		
	
		
			
			|  | 66 | +	snprintf_okx ( len, result, __FILE__, __LINE__, format,		\
 | 
		
	
		
			
			|  | 67 | +		       ##__VA_ARGS__ )
 | 
		
	
		
			
			| 57 | 68 |  
 | 
		
	
		
			
			| 58 | 69 |  /**
 | 
		
	
		
			
			| 59 | 70 |   * Perform vsprintf() self-tests
 |