|  | @@ -11,6 +11,44 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #define NS_MODULE util_format
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +#if !defined(HAVE_HTONLL) && !defined(htonll)
 | 
	
		
			
				|  |  | +#ifdef WORDS_BIGENDIAN
 | 
	
		
			
				|  |  | +#define htonll(x) (x)
 | 
	
		
			
				|  |  | +#else
 | 
	
		
			
				|  |  | +static uint64_t
 | 
	
		
			
				|  |  | +htonll(uint64_t a)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +  return htonl((uint32_t)(a>>32)) | (((uint64_t)htonl((uint32_t)a))<<32);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +#endif
 | 
	
		
			
				|  |  | +#endif
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static void
 | 
	
		
			
				|  |  | +test_util_format_unaligned_accessors(void *ignored)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +  (void)ignored;
 | 
	
		
			
				|  |  | +  char buf[9] = "onionsoup"; // 6f6e696f6e736f7570
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  tt_u64_op(get_uint64(buf+1), OP_EQ, htonll(U64_LITERAL(0x6e696f6e736f7570)));
 | 
	
		
			
				|  |  | +  tt_uint_op(get_uint32(buf+1), OP_EQ, htonl(0x6e696f6e));
 | 
	
		
			
				|  |  | +  tt_uint_op(get_uint16(buf+1), OP_EQ, htons(0x6e69));
 | 
	
		
			
				|  |  | +  tt_uint_op(get_uint8(buf+1), OP_EQ, 0x6e);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  set_uint8(buf+7, 0x61);
 | 
	
		
			
				|  |  | +  tt_mem_op(buf, OP_EQ, "onionsoap", 9);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  set_uint16(buf+6, htons(0x746f));
 | 
	
		
			
				|  |  | +  tt_mem_op(buf, OP_EQ, "onionstop", 9);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  set_uint32(buf+1, htonl(0x78696465));
 | 
	
		
			
				|  |  | +  tt_mem_op(buf, OP_EQ, "oxidestop", 9);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  set_uint64(buf+1, htonll(U64_LITERAL(0x6266757363617465)));
 | 
	
		
			
				|  |  | +  tt_mem_op(buf, OP_EQ, "obfuscate", 9);
 | 
	
		
			
				|  |  | + done:
 | 
	
		
			
				|  |  | +  ;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  static void
 | 
	
		
			
				|  |  |  test_util_format_base64_encode(void *ignored)
 | 
	
		
			
				|  |  |  {
 | 
	
	
		
			
				|  | @@ -252,6 +290,8 @@ test_util_format_base16_decode(void *ignored)
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  struct testcase_t util_format_tests[] = {
 | 
	
		
			
				|  |  | +  { "unaligned_accessors", test_util_format_unaligned_accessors, 0,
 | 
	
		
			
				|  |  | +    NULL, NULL },
 | 
	
		
			
				|  |  |    { "base64_encode", test_util_format_base64_encode, 0, NULL, NULL },
 | 
	
		
			
				|  |  |    { "base64_decode_nopad", test_util_format_base64_decode_nopad, 0,
 | 
	
		
			
				|  |  |      NULL, NULL },
 |