gl_linkedhash_list.c:gl_linked_nx_create_empty:
   45|      2|{
   46|      2|  struct gl_list_impl *list =
   47|      2|    (struct gl_list_impl *) malloc (sizeof (struct gl_list_impl));
   48|       |
   49|      2|  if (list == NULL)
  ------------------
  |  Branch (49:7): [True: 0, False: 2]
  ------------------
   50|      0|    return NULL;
   51|       |
   52|      2|  list->base.vtable = implementation;
   53|      2|  list->base.equals_fn = equals_fn;
   54|      2|  list->base.hashcode_fn = hashcode_fn;
   55|      2|  list->base.dispose_fn = dispose_fn;
   56|      2|  list->base.allow_duplicates = allow_duplicates;
   57|      2|#if WITH_HASHTABLE
   58|      2|  list->table_size = 11;
   59|      2|  list->table =
   60|      2|    (gl_hash_entry_t *) calloc (list->table_size, sizeof (gl_hash_entry_t));
   61|      2|  if (list->table == NULL)
  ------------------
  |  Branch (61:7): [True: 0, False: 2]
  ------------------
   62|      0|    goto fail;
   63|      2|#endif
   64|      2|  list->root.next = &list->root;
   65|      2|  list->root.prev = &list->root;
   66|      2|  list->count = 0;
   67|       |
   68|      2|  return list;
   69|       |
   70|      0|#if WITH_HASHTABLE
   71|      0| fail:
   72|      0|  free (list);
   73|      0|  return NULL;
   74|      2|#endif
   75|      2|}

gl_list_nx_create_empty:
  607|      2|{
  608|      2|  return implementation->nx_create_empty (implementation, equals_fn,
  609|      2|                                          hashcode_fn, dispose_fn,
  610|      2|                                          allow_duplicates);
  611|      2|}

_gnutls_register_accel_crypto:
   33|      2|{
   34|      2|#if defined(ASM_X86)
   35|      2|	register_x86_crypto();
   36|      2|#endif
   37|       |
   38|       |#if defined(ASM_AARCH64)
   39|       |	register_aarch64_crypto();
   40|       |#endif
   41|       |
   42|      2|	return;
   43|      2|}

_gnutls_afalg_init:
  858|      2|{
  859|      2|	return 0;
  860|      2|}

_gnutls_cryptodev_init:
  500|      2|{
  501|      2|	return 0;
  502|      2|}

register_x86_crypto:
 1086|      2|{
 1087|      2|	unsigned capabilities = 0;
 1088|      2|	char *p;
 1089|      2|	p = secure_getenv("GNUTLS_CPUID_OVERRIDE");
 1090|      2|	if (p) {
  ------------------
  |  Branch (1090:6): [True: 0, False: 2]
  ------------------
 1091|      0|		capabilities = strtol(p, NULL, 0);
 1092|      0|	}
 1093|       |
 1094|      2|	register_x86_intel_crypto(capabilities);
 1095|      2|#ifdef ENABLE_PADLOCK
 1096|      2|	register_x86_padlock_crypto(capabilities);
 1097|      2|#endif
 1098|      2|}
x86-common.c:register_x86_intel_crypto:
  806|      2|{
  807|      2|	int ret;
  808|      2|	enum x86_cpu_vendor vendor;
  809|       |
  810|      2|	memset(GNUTLS_x86_cpuid_s, 0, sizeof(GNUTLS_x86_cpuid_s));
  811|       |
  812|      2|	vendor = check_x86_cpu_vendor();
  813|      2|	if (vendor == X86_CPU_VENDOR_OTHER) {
  ------------------
  |  Branch (813:6): [True: 0, False: 2]
  ------------------
  814|      0|		return;
  815|      0|	}
  816|       |
  817|      2|	if (capabilities == 0) {
  ------------------
  |  Branch (817:6): [True: 2, False: 0]
  ------------------
  818|      2|		if (!read_cpuid_vals(GNUTLS_x86_cpuid_s))
  ------------------
  |  Branch (818:7): [True: 0, False: 2]
  ------------------
  819|      0|			return;
  820|      2|		if (!check_4th_gen_intel_features(GNUTLS_x86_cpuid_s[1])) {
  ------------------
  |  Branch (820:7): [True: 0, False: 2]
  ------------------
  821|      0|			GNUTLS_x86_cpuid_s[1] &= ~bit_AVX;
  822|       |
  823|       |			/* Clear AVX2 bits as well, according to what
  824|       |			 * OpenSSL does.  Should we clear
  825|       |			 * bit_AVX512DQ, bit_AVX512PF, bit_AVX512ER,
  826|       |			 * and bit_AVX512CD? */
  827|      0|			GNUTLS_x86_cpuid_s[2] &=
  828|      0|				~(bit_AVX2 | bit_AVX512F | bit_AVX512IFMA |
  829|      0|				  bit_AVX512BW | bit_AVX512BW);
  830|      0|		}
  831|      2|	} else {
  832|      0|		capabilities_to_intel_cpuid(capabilities);
  833|      0|	}
  834|       |
  835|       |	/* CRYPTOGAMS uses the (1 << 30) bit as an indicator of Intel CPUs */
  836|      2|	if (vendor == X86_CPU_VENDOR_INTEL) {
  ------------------
  |  Branch (836:6): [True: 2, False: 0]
  ------------------
  837|      2|		GNUTLS_x86_cpuid_s[0] |= 1 << 30;
  838|      2|	} else {
  839|      0|		GNUTLS_x86_cpuid_s[0] &= ~(1 << 30);
  840|      0|	}
  841|       |
  842|      2|	if (check_ssse3()) {
  ------------------
  |  Branch (842:6): [True: 2, False: 0]
  ------------------
  843|      2|		_gnutls_debug_log("Intel SSSE3 was detected\n");
  ------------------
  |  |  149|      2|#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|      2|	do {                                          \
  |  |  |  |  145|      2|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      2|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      2|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  147|      2|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  844|       |
  845|      2|		ret = gnutls_crypto_single_cipher_register(
  846|      2|			GNUTLS_CIPHER_AES_128_GCM, 90,
  847|      2|			&_gnutls_aes_gcm_x86_ssse3, 0);
  848|      2|		if (ret < 0) {
  ------------------
  |  Branch (848:7): [True: 0, False: 2]
  ------------------
  849|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  850|      0|		}
  851|       |
  852|      2|		ret = gnutls_crypto_single_cipher_register(
  853|      2|			GNUTLS_CIPHER_AES_192_GCM, 90,
  854|      2|			&_gnutls_aes_gcm_x86_ssse3, 0);
  855|      2|		if (ret < 0) {
  ------------------
  |  Branch (855:7): [True: 0, False: 2]
  ------------------
  856|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  857|      0|		}
  858|       |
  859|      2|		ret = gnutls_crypto_single_cipher_register(
  860|      2|			GNUTLS_CIPHER_AES_256_GCM, 90,
  861|      2|			&_gnutls_aes_gcm_x86_ssse3, 0);
  862|      2|		if (ret < 0) {
  ------------------
  |  Branch (862:7): [True: 0, False: 2]
  ------------------
  863|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  864|      0|		}
  865|       |
  866|      2|		ret = gnutls_crypto_single_cipher_register(
  867|      2|			GNUTLS_CIPHER_AES_128_CBC, 90, &_gnutls_aes_ssse3, 0);
  868|      2|		if (ret < 0) {
  ------------------
  |  Branch (868:7): [True: 0, False: 2]
  ------------------
  869|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  870|      0|		}
  871|       |
  872|      2|		ret = gnutls_crypto_single_cipher_register(
  873|      2|			GNUTLS_CIPHER_AES_192_CBC, 90, &_gnutls_aes_ssse3, 0);
  874|      2|		if (ret < 0) {
  ------------------
  |  Branch (874:7): [True: 0, False: 2]
  ------------------
  875|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  876|      0|		}
  877|       |
  878|      2|		ret = gnutls_crypto_single_cipher_register(
  879|      2|			GNUTLS_CIPHER_AES_256_CBC, 90, &_gnutls_aes_ssse3, 0);
  880|      2|		if (ret < 0) {
  ------------------
  |  Branch (880:7): [True: 0, False: 2]
  ------------------
  881|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  882|      0|		}
  883|      2|	}
  884|       |
  885|      2|	if (check_sha() || check_ssse3()) {
  ------------------
  |  Branch (885:6): [True: 0, False: 2]
  |  Branch (885:21): [True: 2, False: 0]
  ------------------
  886|      2|		if (check_sha())
  ------------------
  |  Branch (886:7): [True: 0, False: 2]
  ------------------
  887|      2|			_gnutls_debug_log("Intel SHA was detected\n");
  ------------------
  |  |  149|      0|#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  888|       |
  889|      2|		ret = gnutls_crypto_single_digest_register(
  890|      2|			GNUTLS_DIG_SHA1, 80, &_gnutls_sha_x86_ssse3, 0);
  891|      2|		if (ret < 0) {
  ------------------
  |  Branch (891:7): [True: 0, False: 2]
  ------------------
  892|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  893|      0|		}
  894|       |
  895|      2|		ret = gnutls_crypto_single_digest_register(
  896|      2|			GNUTLS_DIG_SHA224, 80, &_gnutls_sha_x86_ssse3, 0);
  897|      2|		if (ret < 0) {
  ------------------
  |  Branch (897:7): [True: 0, False: 2]
  ------------------
  898|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  899|      0|		}
  900|       |
  901|      2|		ret = gnutls_crypto_single_digest_register(
  902|      2|			GNUTLS_DIG_SHA256, 80, &_gnutls_sha_x86_ssse3, 0);
  903|      2|		if (ret < 0) {
  ------------------
  |  Branch (903:7): [True: 0, False: 2]
  ------------------
  904|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  905|      0|		}
  906|       |
  907|      2|		ret = gnutls_crypto_single_mac_register(
  908|      2|			GNUTLS_MAC_SHA1, 80, &_gnutls_hmac_sha_x86_ssse3, 0);
  909|      2|		if (ret < 0)
  ------------------
  |  Branch (909:7): [True: 0, False: 2]
  ------------------
  910|      2|			gnutls_assert();
  ------------------
  |  |   34|      2|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  911|       |
  912|      2|		ret = gnutls_crypto_single_mac_register(
  913|      2|			GNUTLS_MAC_SHA224, 80, &_gnutls_hmac_sha_x86_ssse3, 0);
  914|      2|		if (ret < 0)
  ------------------
  |  Branch (914:7): [True: 0, False: 2]
  ------------------
  915|      2|			gnutls_assert();
  ------------------
  |  |   34|      2|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  916|       |
  917|      2|		ret = gnutls_crypto_single_mac_register(
  918|      2|			GNUTLS_MAC_SHA256, 80, &_gnutls_hmac_sha_x86_ssse3, 0);
  919|      2|		if (ret < 0)
  ------------------
  |  Branch (919:7): [True: 0, False: 2]
  ------------------
  920|      2|			gnutls_assert();
  ------------------
  |  |   34|      2|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  921|       |
  922|      2|		ret = gnutls_crypto_single_digest_register(
  923|      2|			GNUTLS_DIG_SHA384, 80, &_gnutls_sha_x86_ssse3, 0);
  924|      2|		if (ret < 0)
  ------------------
  |  Branch (924:7): [True: 0, False: 2]
  ------------------
  925|      2|			gnutls_assert();
  ------------------
  |  |   34|      2|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  926|       |
  927|      2|		ret = gnutls_crypto_single_digest_register(
  928|      2|			GNUTLS_DIG_SHA512, 80, &_gnutls_sha_x86_ssse3, 0);
  929|      2|		if (ret < 0)
  ------------------
  |  Branch (929:7): [True: 0, False: 2]
  ------------------
  930|      2|			gnutls_assert();
  ------------------
  |  |   34|      2|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  931|      2|		ret = gnutls_crypto_single_mac_register(
  932|      2|			GNUTLS_MAC_SHA384, 80, &_gnutls_hmac_sha_x86_ssse3, 0);
  933|      2|		if (ret < 0)
  ------------------
  |  Branch (933:7): [True: 0, False: 2]
  ------------------
  934|      2|			gnutls_assert();
  ------------------
  |  |   34|      2|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  935|       |
  936|      2|		ret = gnutls_crypto_single_mac_register(
  937|      2|			GNUTLS_MAC_SHA512, 80, &_gnutls_hmac_sha_x86_ssse3, 0);
  938|      2|		if (ret < 0)
  ------------------
  |  Branch (938:7): [True: 0, False: 2]
  ------------------
  939|      2|			gnutls_assert();
  ------------------
  |  |   34|      2|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  940|      2|	}
  941|       |
  942|      2|	if (check_optimized_aes()) {
  ------------------
  |  Branch (942:6): [True: 2, False: 0]
  ------------------
  943|      2|		_gnutls_debug_log("Intel AES accelerator was detected\n");
  ------------------
  |  |  149|      2|#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|      2|	do {                                          \
  |  |  |  |  145|      2|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      2|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      2|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  147|      2|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  944|      2|		ret = gnutls_crypto_single_cipher_register(
  945|      2|			GNUTLS_CIPHER_AES_128_CBC, 80, &_gnutls_aesni_x86, 0);
  946|      2|		if (ret < 0) {
  ------------------
  |  Branch (946:7): [True: 0, False: 2]
  ------------------
  947|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  948|      0|		}
  949|       |
  950|      2|		ret = gnutls_crypto_single_cipher_register(
  951|      2|			GNUTLS_CIPHER_AES_192_CBC, 80, &_gnutls_aesni_x86, 0);
  952|      2|		if (ret < 0) {
  ------------------
  |  Branch (952:7): [True: 0, False: 2]
  ------------------
  953|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  954|      0|		}
  955|       |
  956|      2|		ret = gnutls_crypto_single_cipher_register(
  957|      2|			GNUTLS_CIPHER_AES_256_CBC, 80, &_gnutls_aesni_x86, 0);
  958|      2|		if (ret < 0) {
  ------------------
  |  Branch (958:7): [True: 0, False: 2]
  ------------------
  959|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  960|      0|		}
  961|       |
  962|      2|		ret = gnutls_crypto_single_cipher_register(
  963|      2|			GNUTLS_CIPHER_AES_128_CCM, 80,
  964|      2|			&_gnutls_aes_ccm_x86_aesni, 0);
  965|      2|		if (ret < 0) {
  ------------------
  |  Branch (965:7): [True: 0, False: 2]
  ------------------
  966|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  967|      0|		}
  968|       |
  969|      2|		ret = gnutls_crypto_single_cipher_register(
  970|      2|			GNUTLS_CIPHER_AES_256_CCM, 80,
  971|      2|			&_gnutls_aes_ccm_x86_aesni, 0);
  972|      2|		if (ret < 0) {
  ------------------
  |  Branch (972:7): [True: 0, False: 2]
  ------------------
  973|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  974|      0|		}
  975|       |
  976|      2|		ret = gnutls_crypto_single_cipher_register(
  977|      2|			GNUTLS_CIPHER_AES_128_CCM_8, 80,
  978|      2|			&_gnutls_aes_ccm_x86_aesni, 0);
  979|      2|		if (ret < 0) {
  ------------------
  |  Branch (979:7): [True: 0, False: 2]
  ------------------
  980|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  981|      0|		}
  982|       |
  983|      2|		ret = gnutls_crypto_single_cipher_register(
  984|      2|			GNUTLS_CIPHER_AES_256_CCM_8, 80,
  985|      2|			&_gnutls_aes_ccm_x86_aesni, 0);
  986|      2|		if (ret < 0) {
  ------------------
  |  Branch (986:7): [True: 0, False: 2]
  ------------------
  987|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  988|      0|		}
  989|       |
  990|      2|		ret = gnutls_crypto_single_cipher_register(
  991|      2|			GNUTLS_CIPHER_AES_128_XTS, 80,
  992|      2|			&_gnutls_aes_xts_x86_aesni, 0);
  993|      2|		if (ret < 0) {
  ------------------
  |  Branch (993:7): [True: 0, False: 2]
  ------------------
  994|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  995|      0|		}
  996|       |
  997|      2|		ret = gnutls_crypto_single_cipher_register(
  998|      2|			GNUTLS_CIPHER_AES_256_XTS, 80,
  999|      2|			&_gnutls_aes_xts_x86_aesni, 0);
 1000|      2|		if (ret < 0) {
  ------------------
  |  Branch (1000:7): [True: 0, False: 2]
  ------------------
 1001|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1002|      0|		}
 1003|       |
 1004|      2|#ifdef ASM_X86_64
 1005|      2|		if (check_pclmul()) {
  ------------------
  |  Branch (1005:7): [True: 2, False: 0]
  ------------------
 1006|       |			/* register GCM ciphers */
 1007|      2|			if (check_avx_movbe()) {
  ------------------
  |  Branch (1007:8): [True: 2, False: 0]
  ------------------
 1008|      2|				_gnutls_debug_log(
  ------------------
  |  |  149|      2|#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|      2|	do {                                          \
  |  |  |  |  145|      2|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      2|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      2|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  147|      2|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1009|      2|					"Intel GCM accelerator (AVX) was detected\n");
 1010|      2|				ret = gnutls_crypto_single_cipher_register(
 1011|      2|					GNUTLS_CIPHER_AES_128_GCM, 80,
 1012|      2|					&_gnutls_aes_gcm_pclmul_avx, 0);
 1013|      2|				if (ret < 0) {
  ------------------
  |  Branch (1013:9): [True: 0, False: 2]
  ------------------
 1014|      0|					gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1015|      0|				}
 1016|       |
 1017|      2|				ret = gnutls_crypto_single_cipher_register(
 1018|      2|					GNUTLS_CIPHER_AES_192_GCM, 80,
 1019|      2|					&_gnutls_aes_gcm_pclmul_avx, 0);
 1020|      2|				if (ret < 0) {
  ------------------
  |  Branch (1020:9): [True: 0, False: 2]
  ------------------
 1021|      0|					gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1022|      0|				}
 1023|       |
 1024|      2|				ret = gnutls_crypto_single_cipher_register(
 1025|      2|					GNUTLS_CIPHER_AES_256_GCM, 80,
 1026|      2|					&_gnutls_aes_gcm_pclmul_avx, 0);
 1027|      2|				if (ret < 0) {
  ------------------
  |  Branch (1027:9): [True: 0, False: 2]
  ------------------
 1028|      0|					gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1029|      0|				}
 1030|      2|			} else {
 1031|      0|				_gnutls_debug_log(
  ------------------
  |  |  149|      0|#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1032|      0|					"Intel GCM accelerator was detected\n");
 1033|      0|				ret = gnutls_crypto_single_cipher_register(
 1034|      0|					GNUTLS_CIPHER_AES_128_GCM, 80,
 1035|      0|					&_gnutls_aes_gcm_pclmul, 0);
 1036|      0|				if (ret < 0) {
  ------------------
  |  Branch (1036:9): [True: 0, False: 0]
  ------------------
 1037|      0|					gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1038|      0|				}
 1039|       |
 1040|      0|				ret = gnutls_crypto_single_cipher_register(
 1041|      0|					GNUTLS_CIPHER_AES_192_GCM, 80,
 1042|      0|					&_gnutls_aes_gcm_pclmul, 0);
 1043|      0|				if (ret < 0) {
  ------------------
  |  Branch (1043:9): [True: 0, False: 0]
  ------------------
 1044|      0|					gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1045|      0|				}
 1046|       |
 1047|      0|				ret = gnutls_crypto_single_cipher_register(
 1048|      0|					GNUTLS_CIPHER_AES_256_GCM, 80,
 1049|      0|					&_gnutls_aes_gcm_pclmul, 0);
 1050|      0|				if (ret < 0) {
  ------------------
  |  Branch (1050:9): [True: 0, False: 0]
  ------------------
 1051|      0|					gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1052|      0|				}
 1053|      0|			}
 1054|      2|		} else
 1055|      0|#endif
 1056|      0|		{
 1057|      0|			ret = gnutls_crypto_single_cipher_register(
 1058|      0|				GNUTLS_CIPHER_AES_128_GCM, 80,
 1059|      0|				&_gnutls_aes_gcm_x86_aesni, 0);
 1060|      0|			if (ret < 0) {
  ------------------
  |  Branch (1060:8): [True: 0, False: 0]
  ------------------
 1061|      0|				gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1062|      0|			}
 1063|       |
 1064|      0|			ret = gnutls_crypto_single_cipher_register(
 1065|      0|				GNUTLS_CIPHER_AES_192_GCM, 80,
 1066|      0|				&_gnutls_aes_gcm_x86_aesni, 0);
 1067|      0|			if (ret < 0) {
  ------------------
  |  Branch (1067:8): [True: 0, False: 0]
  ------------------
 1068|      0|				gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1069|      0|			}
 1070|       |
 1071|      0|			ret = gnutls_crypto_single_cipher_register(
 1072|      0|				GNUTLS_CIPHER_AES_256_GCM, 80,
 1073|      0|				&_gnutls_aes_gcm_x86_aesni, 0);
 1074|      0|			if (ret < 0) {
  ------------------
  |  Branch (1074:8): [True: 0, False: 0]
  ------------------
 1075|      0|				gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1076|      0|			}
 1077|      0|		}
 1078|      2|	} else {
 1079|      0|		_gnutls_priority_update_non_aesni();
 1080|      0|	}
 1081|       |
 1082|      2|	return;
 1083|      2|}
x86-common.c:check_x86_cpu_vendor:
  785|      2|{
  786|      2|	unsigned int a, b, c, d;
  787|       |
  788|      2|	if (!__get_cpuid(0, &a, &b, &c, &d)) {
  ------------------
  |  Branch (788:6): [True: 0, False: 2]
  ------------------
  789|      0|		return X86_CPU_VENDOR_OTHER;
  790|      0|	}
  791|       |
  792|      2|	if (memcmp(&b, "Genu", 4) == 0 && memcmp(&d, "ineI", 4) == 0 &&
  ------------------
  |  Branch (792:6): [True: 2, False: 0]
  |  Branch (792:36): [True: 2, False: 0]
  ------------------
  793|      2|	    memcmp(&c, "ntel", 4) == 0) {
  ------------------
  |  Branch (793:6): [True: 2, False: 0]
  ------------------
  794|      2|		return X86_CPU_VENDOR_INTEL;
  795|      2|	}
  796|       |
  797|      0|	if (memcmp(&b, "Auth", 4) == 0 && memcmp(&d, "enti", 4) == 0 &&
  ------------------
  |  Branch (797:6): [True: 0, False: 0]
  |  Branch (797:36): [True: 0, False: 0]
  ------------------
  798|      0|	    memcmp(&c, "cAMD", 4) == 0) {
  ------------------
  |  Branch (798:6): [True: 0, False: 0]
  ------------------
  799|      0|		return X86_CPU_VENDOR_AMD;
  800|      0|	}
  801|       |
  802|      0|	return X86_CPU_VENDOR_OTHER;
  803|      0|}
x86-common.c:read_cpuid_vals:
  144|      2|{
  145|      2|	unsigned t1, t2, t3;
  146|      2|	vals[0] = vals[1] = vals[2] = vals[3] = 0;
  147|       |
  148|      2|	if (!__get_cpuid(1, &t1, &t2, &vals[1], &vals[0]))
  ------------------
  |  Branch (148:6): [True: 0, False: 2]
  ------------------
  149|      0|		return 0;
  150|       |	/* suppress AVX512; it works conditionally on certain CPUs on the original code */
  151|      2|	vals[1] &= 0xfffff7ff;
  152|       |
  153|      2|	get_cpuid_level7(&t1, &vals[2], &t2, &t3);
  ------------------
  |  |  140|      2|#define get_cpuid_level7(a, b, c, d) __get_cpuid_count(7, 0, a, b, c, d)
  ------------------
  154|       |
  155|      2|	return 1;
  156|      2|}
x86-common.c:check_4th_gen_intel_features:
  163|      2|{
  164|      2|	uint32_t xcr0;
  165|       |
  166|      2|	if ((ecx & bit_OSXSAVE) != bit_OSXSAVE)
  ------------------
  |  Branch (166:6): [True: 0, False: 2]
  ------------------
  167|      0|		return 0;
  168|       |
  169|       |#if defined(_MSC_VER) && !defined(__clang__)
  170|       |	xcr0 = _xgetbv(0);
  171|       |#else
  172|      2|	__asm__("xgetbv" : "=a"(xcr0) : "c"(0) : "%edx");
  173|      2|#endif
  174|       |	/* Check if xmm and ymm state are enabled in XCR0. */
  175|      2|	return (xcr0 & 6) == 6;
  176|      2|}
x86-common.c:check_ssse3:
  242|      4|{
  243|      4|	return (GNUTLS_x86_cpuid_s[1] & bit_SSSE3);
  244|      4|}
x86-common.c:check_sha:
  247|      4|{
  248|      4|	return (GNUTLS_x86_cpuid_s[2] & bit_SHA);
  249|      4|}
x86-common.c:check_optimized_aes:
  237|      2|{
  238|      2|	return (GNUTLS_x86_cpuid_s[1] & bit_AES);
  239|      2|}
x86-common.c:check_pclmul:
  259|      2|{
  260|      2|	return (GNUTLS_x86_cpuid_s[1] & bit_PCLMUL);
  261|      2|}
x86-common.c:check_avx_movbe:
  253|      2|{
  254|      2|	return (GNUTLS_x86_cpuid_s[1] & (bit_AVX | bit_MOVBE)) ==
  255|      2|	       (bit_AVX | bit_MOVBE);
  256|      2|}
x86-common.c:register_x86_padlock_crypto:
  379|      2|{
  380|      2|	int ret, phe;
  381|      2|	unsigned edx;
  382|       |
  383|      2|	if (check_zhaoxin() == 0)
  ------------------
  |  Branch (383:6): [True: 2, False: 0]
  ------------------
  384|      2|		return;
  385|       |
  386|      0|	memset(GNUTLS_x86_cpuid_s, 0, sizeof(GNUTLS_x86_cpuid_s));
  387|       |
  388|      0|	if (capabilities == 0) {
  ------------------
  |  Branch (388:6): [True: 0, False: 0]
  ------------------
  389|      0|		if (!read_cpuid_vals(GNUTLS_x86_cpuid_s))
  ------------------
  |  Branch (389:7): [True: 0, False: 0]
  ------------------
  390|      0|			return;
  391|      0|		edx = padlock_capability();
  392|      0|	} else {
  393|      0|		capabilities_to_intel_cpuid(capabilities);
  394|      0|		edx = capabilities_to_zhaoxin_edx(capabilities);
  395|      0|	}
  396|       |
  397|      0|	if (check_ssse3()) {
  ------------------
  |  Branch (397:6): [True: 0, False: 0]
  ------------------
  398|      0|		_gnutls_debug_log("Zhaoxin SSSE3 was detected\n");
  ------------------
  |  |  149|      0|#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  399|       |
  400|      0|		ret = gnutls_crypto_single_cipher_register(
  401|      0|			GNUTLS_CIPHER_AES_128_GCM, 90,
  402|      0|			&_gnutls_aes_gcm_x86_ssse3, 0);
  403|      0|		if (ret < 0) {
  ------------------
  |  Branch (403:7): [True: 0, False: 0]
  ------------------
  404|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  405|      0|		}
  406|       |
  407|      0|		ret = gnutls_crypto_single_cipher_register(
  408|      0|			GNUTLS_CIPHER_AES_192_GCM, 90,
  409|      0|			&_gnutls_aes_gcm_x86_ssse3, 0);
  410|      0|		if (ret < 0) {
  ------------------
  |  Branch (410:7): [True: 0, False: 0]
  ------------------
  411|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|      0|		}
  413|       |
  414|      0|		ret = gnutls_crypto_single_cipher_register(
  415|      0|			GNUTLS_CIPHER_AES_256_GCM, 90,
  416|      0|			&_gnutls_aes_gcm_x86_ssse3, 0);
  417|      0|		if (ret < 0) {
  ------------------
  |  Branch (417:7): [True: 0, False: 0]
  ------------------
  418|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  419|      0|		}
  420|       |
  421|      0|		ret = gnutls_crypto_single_cipher_register(
  422|      0|			GNUTLS_CIPHER_AES_128_CBC, 90, &_gnutls_aes_ssse3, 0);
  423|      0|		if (ret < 0) {
  ------------------
  |  Branch (423:7): [True: 0, False: 0]
  ------------------
  424|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  425|      0|		}
  426|       |
  427|      0|		ret = gnutls_crypto_single_cipher_register(
  428|      0|			GNUTLS_CIPHER_AES_192_CBC, 90, &_gnutls_aes_ssse3, 0);
  429|      0|		if (ret < 0) {
  ------------------
  |  Branch (429:7): [True: 0, False: 0]
  ------------------
  430|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  431|      0|		}
  432|       |
  433|      0|		ret = gnutls_crypto_single_cipher_register(
  434|      0|			GNUTLS_CIPHER_AES_256_CBC, 90, &_gnutls_aes_ssse3, 0);
  435|      0|		if (ret < 0) {
  ------------------
  |  Branch (435:7): [True: 0, False: 0]
  ------------------
  436|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  437|      0|		}
  438|      0|	}
  439|       |
  440|      0|	if (check_sha() || check_ssse3()) {
  ------------------
  |  Branch (440:6): [True: 0, False: 0]
  |  Branch (440:21): [True: 0, False: 0]
  ------------------
  441|      0|		if (check_sha())
  ------------------
  |  Branch (441:7): [True: 0, False: 0]
  ------------------
  442|      0|			_gnutls_debug_log("Zhaoxin SHA was detected\n");
  ------------------
  |  |  149|      0|#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  443|       |
  444|      0|		ret = gnutls_crypto_single_digest_register(
  445|      0|			GNUTLS_DIG_SHA1, 80, &_gnutls_sha_x86_ssse3, 0);
  446|      0|		if (ret < 0) {
  ------------------
  |  Branch (446:7): [True: 0, False: 0]
  ------------------
  447|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  448|      0|		}
  449|       |
  450|      0|		ret = gnutls_crypto_single_digest_register(
  451|      0|			GNUTLS_DIG_SHA224, 80, &_gnutls_sha_x86_ssse3, 0);
  452|      0|		if (ret < 0) {
  ------------------
  |  Branch (452:7): [True: 0, False: 0]
  ------------------
  453|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  454|      0|		}
  455|       |
  456|      0|		ret = gnutls_crypto_single_digest_register(
  457|      0|			GNUTLS_DIG_SHA256, 80, &_gnutls_sha_x86_ssse3, 0);
  458|      0|		if (ret < 0) {
  ------------------
  |  Branch (458:7): [True: 0, False: 0]
  ------------------
  459|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  460|      0|		}
  461|       |
  462|      0|		ret = gnutls_crypto_single_mac_register(
  463|      0|			GNUTLS_MAC_SHA1, 80, &_gnutls_hmac_sha_x86_ssse3, 0);
  464|      0|		if (ret < 0)
  ------------------
  |  Branch (464:7): [True: 0, False: 0]
  ------------------
  465|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  466|       |
  467|      0|		ret = gnutls_crypto_single_mac_register(
  468|      0|			GNUTLS_MAC_SHA224, 80, &_gnutls_hmac_sha_x86_ssse3, 0);
  469|      0|		if (ret < 0)
  ------------------
  |  Branch (469:7): [True: 0, False: 0]
  ------------------
  470|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  471|       |
  472|      0|		ret = gnutls_crypto_single_mac_register(
  473|      0|			GNUTLS_MAC_SHA256, 80, &_gnutls_hmac_sha_x86_ssse3, 0);
  474|      0|		if (ret < 0)
  ------------------
  |  Branch (474:7): [True: 0, False: 0]
  ------------------
  475|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  476|       |
  477|      0|		ret = gnutls_crypto_single_digest_register(
  478|      0|			GNUTLS_DIG_SHA384, 80, &_gnutls_sha_x86_ssse3, 0);
  479|      0|		if (ret < 0)
  ------------------
  |  Branch (479:7): [True: 0, False: 0]
  ------------------
  480|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  481|       |
  482|      0|		ret = gnutls_crypto_single_digest_register(
  483|      0|			GNUTLS_DIG_SHA512, 80, &_gnutls_sha_x86_ssse3, 0);
  484|      0|		if (ret < 0)
  ------------------
  |  Branch (484:7): [True: 0, False: 0]
  ------------------
  485|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  486|      0|		ret = gnutls_crypto_single_mac_register(
  487|      0|			GNUTLS_MAC_SHA384, 80, &_gnutls_hmac_sha_x86_ssse3, 0);
  488|      0|		if (ret < 0)
  ------------------
  |  Branch (488:7): [True: 0, False: 0]
  ------------------
  489|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  490|       |
  491|      0|		ret = gnutls_crypto_single_mac_register(
  492|      0|			GNUTLS_MAC_SHA512, 80, &_gnutls_hmac_sha_x86_ssse3, 0);
  493|      0|		if (ret < 0)
  ------------------
  |  Branch (493:7): [True: 0, False: 0]
  ------------------
  494|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  495|      0|	}
  496|       |
  497|      0|	if (check_optimized_aes()) {
  ------------------
  |  Branch (497:6): [True: 0, False: 0]
  ------------------
  498|      0|		_gnutls_debug_log("Zhaoxin AES accelerator was detected\n");
  ------------------
  |  |  149|      0|#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  499|      0|		ret = gnutls_crypto_single_cipher_register(
  500|      0|			GNUTLS_CIPHER_AES_128_CBC, 80, &_gnutls_aesni_x86, 0);
  501|      0|		if (ret < 0) {
  ------------------
  |  Branch (501:7): [True: 0, False: 0]
  ------------------
  502|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  503|      0|		}
  504|       |
  505|      0|		ret = gnutls_crypto_single_cipher_register(
  506|      0|			GNUTLS_CIPHER_AES_192_CBC, 80, &_gnutls_aesni_x86, 0);
  507|      0|		if (ret < 0) {
  ------------------
  |  Branch (507:7): [True: 0, False: 0]
  ------------------
  508|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  509|      0|		}
  510|       |
  511|      0|		ret = gnutls_crypto_single_cipher_register(
  512|      0|			GNUTLS_CIPHER_AES_256_CBC, 80, &_gnutls_aesni_x86, 0);
  513|      0|		if (ret < 0) {
  ------------------
  |  Branch (513:7): [True: 0, False: 0]
  ------------------
  514|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  515|      0|		}
  516|       |
  517|      0|		ret = gnutls_crypto_single_cipher_register(
  518|      0|			GNUTLS_CIPHER_AES_128_CCM, 80,
  519|      0|			&_gnutls_aes_ccm_x86_aesni, 0);
  520|      0|		if (ret < 0) {
  ------------------
  |  Branch (520:7): [True: 0, False: 0]
  ------------------
  521|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  522|      0|		}
  523|       |
  524|      0|		ret = gnutls_crypto_single_cipher_register(
  525|      0|			GNUTLS_CIPHER_AES_256_CCM, 80,
  526|      0|			&_gnutls_aes_ccm_x86_aesni, 0);
  527|      0|		if (ret < 0) {
  ------------------
  |  Branch (527:7): [True: 0, False: 0]
  ------------------
  528|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  529|      0|		}
  530|       |
  531|      0|		ret = gnutls_crypto_single_cipher_register(
  532|      0|			GNUTLS_CIPHER_AES_128_CCM_8, 80,
  533|      0|			&_gnutls_aes_ccm_x86_aesni, 0);
  534|      0|		if (ret < 0) {
  ------------------
  |  Branch (534:7): [True: 0, False: 0]
  ------------------
  535|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  536|      0|		}
  537|       |
  538|      0|		ret = gnutls_crypto_single_cipher_register(
  539|      0|			GNUTLS_CIPHER_AES_256_CCM_8, 80,
  540|      0|			&_gnutls_aes_ccm_x86_aesni, 0);
  541|      0|		if (ret < 0) {
  ------------------
  |  Branch (541:7): [True: 0, False: 0]
  ------------------
  542|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|      0|		}
  544|       |
  545|      0|		ret = gnutls_crypto_single_cipher_register(
  546|      0|			GNUTLS_CIPHER_AES_128_XTS, 80,
  547|      0|			&_gnutls_aes_xts_x86_aesni, 0);
  548|      0|		if (ret < 0) {
  ------------------
  |  Branch (548:7): [True: 0, False: 0]
  ------------------
  549|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  550|      0|		}
  551|       |
  552|      0|		ret = gnutls_crypto_single_cipher_register(
  553|      0|			GNUTLS_CIPHER_AES_256_XTS, 80,
  554|      0|			&_gnutls_aes_xts_x86_aesni, 0);
  555|      0|		if (ret < 0) {
  ------------------
  |  Branch (555:7): [True: 0, False: 0]
  ------------------
  556|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  557|      0|		}
  558|       |
  559|      0|#ifdef ASM_X86_64
  560|      0|		if (check_pclmul()) {
  ------------------
  |  Branch (560:7): [True: 0, False: 0]
  ------------------
  561|       |			/* register GCM ciphers */
  562|      0|			_gnutls_debug_log(
  ------------------
  |  |  149|      0|#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  563|      0|				"Zhaoxin GCM accelerator was detected\n");
  564|      0|			if (check_avx_movbe() && check_fast_pclmul()) {
  ------------------
  |  Branch (564:8): [True: 0, False: 0]
  |  Branch (564:29): [True: 0, False: 0]
  ------------------
  565|      0|				_gnutls_debug_log(
  ------------------
  |  |  149|      0|#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  566|      0|					"Zhaoxin GCM accelerator (AVX) was detected\n");
  567|      0|				ret = gnutls_crypto_single_cipher_register(
  568|      0|					GNUTLS_CIPHER_AES_128_GCM, 80,
  569|      0|					&_gnutls_aes_gcm_pclmul_avx, 0);
  570|      0|				if (ret < 0) {
  ------------------
  |  Branch (570:9): [True: 0, False: 0]
  ------------------
  571|      0|					gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  572|      0|				}
  573|       |
  574|      0|				ret = gnutls_crypto_single_cipher_register(
  575|      0|					GNUTLS_CIPHER_AES_192_GCM, 80,
  576|      0|					&_gnutls_aes_gcm_pclmul_avx, 0);
  577|      0|				if (ret < 0) {
  ------------------
  |  Branch (577:9): [True: 0, False: 0]
  ------------------
  578|      0|					gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  579|      0|				}
  580|       |
  581|      0|				ret = gnutls_crypto_single_cipher_register(
  582|      0|					GNUTLS_CIPHER_AES_256_GCM, 80,
  583|      0|					&_gnutls_aes_gcm_pclmul_avx, 0);
  584|      0|				if (ret < 0) {
  ------------------
  |  Branch (584:9): [True: 0, False: 0]
  ------------------
  585|      0|					gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  586|      0|				}
  587|      0|			} else {
  588|      0|				ret = gnutls_crypto_single_cipher_register(
  589|      0|					GNUTLS_CIPHER_AES_128_GCM, 80,
  590|      0|					&_gnutls_aes_gcm_pclmul, 0);
  591|      0|				if (ret < 0) {
  ------------------
  |  Branch (591:9): [True: 0, False: 0]
  ------------------
  592|      0|					gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  593|      0|				}
  594|       |
  595|      0|				ret = gnutls_crypto_single_cipher_register(
  596|      0|					GNUTLS_CIPHER_AES_192_GCM, 80,
  597|      0|					&_gnutls_aes_gcm_pclmul, 0);
  598|      0|				if (ret < 0) {
  ------------------
  |  Branch (598:9): [True: 0, False: 0]
  ------------------
  599|      0|					gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  600|      0|				}
  601|       |
  602|      0|				ret = gnutls_crypto_single_cipher_register(
  603|      0|					GNUTLS_CIPHER_AES_256_GCM, 80,
  604|      0|					&_gnutls_aes_gcm_pclmul, 0);
  605|      0|				if (ret < 0) {
  ------------------
  |  Branch (605:9): [True: 0, False: 0]
  ------------------
  606|      0|					gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  607|      0|				}
  608|      0|			}
  609|      0|		} else
  610|      0|#endif
  611|      0|		{
  612|      0|			ret = gnutls_crypto_single_cipher_register(
  613|      0|				GNUTLS_CIPHER_AES_128_GCM, 80,
  614|      0|				&_gnutls_aes_gcm_x86_aesni, 0);
  615|      0|			if (ret < 0) {
  ------------------
  |  Branch (615:8): [True: 0, False: 0]
  ------------------
  616|      0|				gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  617|      0|			}
  618|       |
  619|      0|			ret = gnutls_crypto_single_cipher_register(
  620|      0|				GNUTLS_CIPHER_AES_192_GCM, 80,
  621|      0|				&_gnutls_aes_gcm_x86_aesni, 0);
  622|      0|			if (ret < 0) {
  ------------------
  |  Branch (622:8): [True: 0, False: 0]
  ------------------
  623|      0|				gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  624|      0|			}
  625|       |
  626|      0|			ret = gnutls_crypto_single_cipher_register(
  627|      0|				GNUTLS_CIPHER_AES_256_GCM, 80,
  628|      0|				&_gnutls_aes_gcm_x86_aesni, 0);
  629|      0|			if (ret < 0) {
  ------------------
  |  Branch (629:8): [True: 0, False: 0]
  ------------------
  630|      0|				gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  631|      0|			}
  632|      0|		}
  633|      0|	}
  634|       |
  635|      0|	if (check_padlock(edx)) {
  ------------------
  |  Branch (635:6): [True: 0, False: 0]
  ------------------
  636|      0|		_gnutls_debug_log("Padlock AES accelerator was detected\n");
  ------------------
  |  |  149|      0|#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  637|      0|		ret = gnutls_crypto_single_cipher_register(
  638|      0|			GNUTLS_CIPHER_AES_128_CBC, 80, &_gnutls_aes_padlock, 0);
  639|      0|		if (ret < 0) {
  ------------------
  |  Branch (639:7): [True: 0, False: 0]
  ------------------
  640|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  641|      0|		}
  642|       |
  643|      0|		ret = gnutls_crypto_single_cipher_register(
  644|      0|			GNUTLS_CIPHER_AES_192_CBC, 80, &_gnutls_aes_padlock, 0);
  645|      0|		if (ret < 0) {
  ------------------
  |  Branch (645:7): [True: 0, False: 0]
  ------------------
  646|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  647|      0|		}
  648|       |
  649|       |		/* register GCM ciphers */
  650|      0|		ret = gnutls_crypto_single_cipher_register(
  651|      0|			GNUTLS_CIPHER_AES_128_GCM, 90, &_gnutls_aes_gcm_padlock,
  652|      0|			0);
  653|      0|		if (ret < 0) {
  ------------------
  |  Branch (653:7): [True: 0, False: 0]
  ------------------
  654|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  655|      0|		}
  656|       |
  657|      0|		ret = gnutls_crypto_single_cipher_register(
  658|      0|			GNUTLS_CIPHER_AES_256_CBC, 80, &_gnutls_aes_padlock, 0);
  659|      0|		if (ret < 0) {
  ------------------
  |  Branch (659:7): [True: 0, False: 0]
  ------------------
  660|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  661|      0|		}
  662|       |
  663|      0|		ret = gnutls_crypto_single_cipher_register(
  664|      0|			GNUTLS_CIPHER_AES_256_GCM, 90, &_gnutls_aes_gcm_padlock,
  665|      0|			0);
  666|      0|		if (ret < 0) {
  ------------------
  |  Branch (666:7): [True: 0, False: 0]
  ------------------
  667|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  668|      0|		}
  669|      0|	}
  670|       |
  671|      0|	if (!check_optimized_aes() && !check_padlock(edx))
  ------------------
  |  Branch (671:6): [True: 0, False: 0]
  |  Branch (671:32): [True: 0, False: 0]
  ------------------
  672|      0|		_gnutls_priority_update_non_aesni();
  673|       |
  674|      0|#ifdef HAVE_LIBNETTLE
  675|      0|	phe = check_phe(edx);
  676|       |
  677|      0|	if (phe && check_phe_partial()) {
  ------------------
  |  Branch (677:6): [True: 0, False: 0]
  |  Branch (677:13): [True: 0, False: 0]
  ------------------
  678|      0|		_gnutls_debug_log(
  ------------------
  |  |  149|      0|#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  679|      0|			"Padlock SHA1 and SHA256 (partial) accelerator was detected\n");
  680|      0|		if (check_phe_sha512(edx)) {
  ------------------
  |  Branch (680:7): [True: 0, False: 0]
  ------------------
  681|      0|			_gnutls_debug_log(
  ------------------
  |  |  149|      0|#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  682|      0|				"Padlock SHA512 (partial) accelerator was detected\n");
  683|      0|			ret = gnutls_crypto_single_digest_register(
  684|      0|				GNUTLS_DIG_SHA384, 80, &_gnutls_sha_padlock, 0);
  685|      0|			if (ret < 0) {
  ------------------
  |  Branch (685:8): [True: 0, False: 0]
  ------------------
  686|      0|				gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  687|      0|			}
  688|       |
  689|      0|			ret = gnutls_crypto_single_digest_register(
  690|      0|				GNUTLS_DIG_SHA512, 80, &_gnutls_sha_padlock, 0);
  691|      0|			if (ret < 0) {
  ------------------
  |  Branch (691:8): [True: 0, False: 0]
  ------------------
  692|      0|				gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  693|      0|			}
  694|       |
  695|      0|			ret = gnutls_crypto_single_mac_register(
  696|      0|				GNUTLS_MAC_SHA384, 80,
  697|      0|				&_gnutls_hmac_sha_padlock, 0);
  698|      0|			if (ret < 0) {
  ------------------
  |  Branch (698:8): [True: 0, False: 0]
  ------------------
  699|      0|				gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  700|      0|			}
  701|       |
  702|      0|			ret = gnutls_crypto_single_mac_register(
  703|      0|				GNUTLS_MAC_SHA512, 80,
  704|      0|				&_gnutls_hmac_sha_padlock, 0);
  705|      0|			if (ret < 0) {
  ------------------
  |  Branch (705:8): [True: 0, False: 0]
  ------------------
  706|      0|				gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  707|      0|			}
  708|      0|		}
  709|       |
  710|      0|		ret = gnutls_crypto_single_digest_register(
  711|      0|			GNUTLS_DIG_SHA1, 90, &_gnutls_sha_padlock, 0);
  712|      0|		if (ret < 0) {
  ------------------
  |  Branch (712:7): [True: 0, False: 0]
  ------------------
  713|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  714|      0|		}
  715|       |
  716|      0|		ret = gnutls_crypto_single_digest_register(
  717|      0|			GNUTLS_DIG_SHA224, 90, &_gnutls_sha_padlock, 0);
  718|      0|		if (ret < 0) {
  ------------------
  |  Branch (718:7): [True: 0, False: 0]
  ------------------
  719|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  720|      0|		}
  721|       |
  722|      0|		ret = gnutls_crypto_single_digest_register(
  723|      0|			GNUTLS_DIG_SHA256, 90, &_gnutls_sha_padlock, 0);
  724|      0|		if (ret < 0) {
  ------------------
  |  Branch (724:7): [True: 0, False: 0]
  ------------------
  725|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  726|      0|		}
  727|       |
  728|      0|		ret = gnutls_crypto_single_mac_register(
  729|      0|			GNUTLS_MAC_SHA1, 90, &_gnutls_hmac_sha_padlock, 0);
  730|      0|		if (ret < 0) {
  ------------------
  |  Branch (730:7): [True: 0, False: 0]
  ------------------
  731|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  732|      0|		}
  733|       |
  734|       |		/* we don't register MAC_SHA224 because it is not used by TLS */
  735|       |
  736|      0|		ret = gnutls_crypto_single_mac_register(
  737|      0|			GNUTLS_MAC_SHA256, 90, &_gnutls_hmac_sha_padlock, 0);
  738|      0|		if (ret < 0) {
  ------------------
  |  Branch (738:7): [True: 0, False: 0]
  ------------------
  739|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  740|      0|		}
  741|      0|	} else if (phe) {
  ------------------
  |  Branch (741:13): [True: 0, False: 0]
  ------------------
  742|       |		/* Original padlock PHE. Does not support incremental operations.
  743|       |		 */
  744|      0|		_gnutls_debug_log(
  ------------------
  |  |  149|      0|#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  745|      0|			"Padlock SHA1 and SHA256 accelerator was detected\n");
  746|      0|		ret = gnutls_crypto_single_digest_register(
  747|      0|			GNUTLS_DIG_SHA1, 90, &_gnutls_sha_padlock_oneshot, 0);
  748|      0|		if (ret < 0) {
  ------------------
  |  Branch (748:7): [True: 0, False: 0]
  ------------------
  749|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  750|      0|		}
  751|       |
  752|      0|		ret = gnutls_crypto_single_digest_register(
  753|      0|			GNUTLS_DIG_SHA256, 90, &_gnutls_sha_padlock_oneshot, 0);
  754|      0|		if (ret < 0) {
  ------------------
  |  Branch (754:7): [True: 0, False: 0]
  ------------------
  755|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  756|      0|		}
  757|       |
  758|      0|		ret = gnutls_crypto_single_mac_register(
  759|      0|			GNUTLS_MAC_SHA1, 90, &_gnutls_hmac_sha_padlock_oneshot,
  760|      0|			0);
  761|      0|		if (ret < 0) {
  ------------------
  |  Branch (761:7): [True: 0, False: 0]
  ------------------
  762|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  763|      0|		}
  764|       |
  765|      0|		ret = gnutls_crypto_single_mac_register(
  766|      0|			GNUTLS_MAC_SHA256, 90,
  767|      0|			&_gnutls_hmac_sha_padlock_oneshot, 0);
  768|      0|		if (ret < 0) {
  ------------------
  |  Branch (768:7): [True: 0, False: 0]
  ------------------
  769|      0|			gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  770|      0|		}
  771|      0|	}
  772|      0|#endif
  773|       |
  774|      0|	return;
  775|      0|}
x86-common.c:check_zhaoxin:
  361|      2|{
  362|      2|	unsigned int a, b, c, d;
  363|       |
  364|      2|	if (!__get_cpuid(0, &a, &b, &c, &d))
  ------------------
  |  Branch (364:6): [True: 0, False: 2]
  ------------------
  365|      0|		return 0;
  366|       |
  367|       |	/* Zhaoxin and VIA CPU was detected */
  368|      2|	if ((memcmp(&b, "Cent", 4) == 0 && memcmp(&d, "aurH", 4) == 0 &&
  ------------------
  |  Branch (368:7): [True: 0, False: 2]
  |  Branch (368:37): [True: 0, False: 0]
  ------------------
  369|      2|	     memcmp(&c, "auls", 4) == 0) ||
  ------------------
  |  Branch (369:7): [True: 0, False: 0]
  ------------------
  370|      2|	    (memcmp(&b, "  Sh", 4) == 0 && memcmp(&d, "angh", 4) == 0 &&
  ------------------
  |  Branch (370:7): [True: 0, False: 2]
  |  Branch (370:37): [True: 0, False: 0]
  ------------------
  371|      2|	     memcmp(&c, "ai  ", 4) == 0)) {
  ------------------
  |  Branch (371:7): [True: 0, False: 0]
  ------------------
  372|      0|		return 1;
  373|      0|	}
  374|       |
  375|      2|	return 0;
  376|      2|}

_gnutls_register_fork_handler:
   51|      2|{
   52|      2|	if (__register_atfork(NULL, NULL, fork_handler, __dso_handle) != 0)
  ------------------
  |  Branch (52:6): [True: 0, False: 2]
  ------------------
   53|      0|		return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR);
  ------------------
  |  |  196|      0|	gnutls_assert_val_int(x, __FILE__, __func__, __LINE__)
  ------------------
   54|      2|	return 0;
   55|      2|}

gnutls_crypto_single_cipher_register:
  179|     36|{
  180|       |	/* we override const in case free_s is set */
  181|     36|	return _algo_register(&glob_cl, algorithm, priority, (void *)s, free_s);
  182|     36|}
gnutls_crypto_single_mac_register:
  351|     10|{
  352|     10|	return _algo_register(&glob_ml, algorithm, priority, (void *)s, free_s);
  353|     10|}
gnutls_crypto_single_digest_register:
  385|     10|{
  386|     10|	return _algo_register(&glob_dl, algorithm, priority, (void *)s, free_s);
  387|     10|}
crypto-backend.c:_algo_register:
   52|     56|{
   53|     56|	algo_list *cl;
   54|     56|	algo_list *last_cl = al;
   55|     56|	int ret;
   56|       |
   57|     56|	if (al == NULL) {
  ------------------
  |  Branch (57:6): [True: 0, False: 56]
  ------------------
   58|      0|		ret = gnutls_assert_val(GNUTLS_E_INVALID_REQUEST);
  ------------------
  |  |  196|      0|	gnutls_assert_val_int(x, __FILE__, __func__, __LINE__)
  ------------------
   59|      0|		goto cleanup;
   60|      0|	}
   61|       |
   62|       |	/* look if there is any cipher with lowest priority. In that case do not add.
   63|       |	 */
   64|     56|	cl = al;
   65|    258|	while (cl && cl->alg_data) {
  ------------------
  |  Branch (65:9): [True: 258, False: 0]
  |  Branch (65:15): [True: 214, False: 44]
  ------------------
   66|    214|		if (cl->algorithm == algorithm) {
  ------------------
  |  Branch (66:7): [True: 12, False: 202]
  ------------------
   67|     12|			if (cl->priority < priority) {
  ------------------
  |  Branch (67:8): [True: 0, False: 12]
  ------------------
   68|      0|				gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   69|      0|				ret = GNUTLS_E_CRYPTO_ALREADY_REGISTERED;
  ------------------
  |  | 3453|      0|#define GNUTLS_E_CRYPTO_ALREADY_REGISTERED GNUTLS_E_ALREADY_REGISTERED
  |  |  ------------------
  |  |  |  | 3454|      0|#define GNUTLS_E_ALREADY_REGISTERED -209
  |  |  ------------------
  ------------------
   70|      0|				goto cleanup;
   71|     12|			} else {
   72|       |				/* the current has higher priority -> overwrite */
   73|     12|				cl->algorithm = algorithm;
   74|     12|				cl->priority = priority;
   75|     12|				cl->alg_data = s;
   76|     12|				cl->free_alg_data = free_s;
   77|     12|				return 0;
   78|     12|			}
   79|     12|		}
   80|    202|		cl = cl->next;
   81|    202|		if (cl)
  ------------------
  |  Branch (81:7): [True: 202, False: 0]
  ------------------
   82|    202|			last_cl = cl;
   83|    202|	}
   84|       |
   85|     44|	cl = gnutls_calloc(1, sizeof(cipher_list));
   86|       |
   87|     44|	if (cl == NULL) {
  ------------------
  |  Branch (87:6): [True: 0, False: 44]
  ------------------
   88|      0|		gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   89|      0|		ret = GNUTLS_E_MEMORY_ERROR;
  ------------------
  |  | 3334|      0|#define GNUTLS_E_MEMORY_ERROR -25
  ------------------
   90|      0|		goto cleanup;
   91|      0|	}
   92|       |
   93|     44|	last_cl->algorithm = algorithm;
   94|     44|	last_cl->priority = priority;
   95|     44|	last_cl->alg_data = s;
   96|     44|	last_cl->free_alg_data = free_s;
   97|     44|	last_cl->next = cl;
   98|       |
   99|     44|	return 0;
  100|      0|cleanup:
  101|      0|	if (free_s)
  ------------------
  |  Branch (101:6): [True: 0, False: 0]
  ------------------
  102|      0|		gnutls_free(s);
  ------------------
  |  | 2265|      0|#define gnutls_free(a) gnutls_free((void *)(a)), a = NULL
  ------------------
  103|      0|	return ret;
  104|     44|}

global.c:_gnutls_switch_lib_state:
   47|      4|{
   48|       |	/* Once into zombie state no errors can change us */
   49|      4|	_gnutls_lib_state = state;
   50|      4|}

_gnutls_global_init_skip:
   61|      2|{
   62|      2|	return 0;
   63|      2|}
global.c:lib_init:
  501|      2|{
  502|      2|	int ret;
  503|      2|	const char *e;
  504|       |
  505|      2|	if (_gnutls_global_init_skip() != 0)
  ------------------
  |  Branch (505:6): [True: 0, False: 2]
  ------------------
  506|      0|		return;
  507|       |
  508|      2|	e = secure_getenv("GNUTLS_NO_IMPLICIT_INIT");
  509|      2|	if (e != NULL) {
  ------------------
  |  Branch (509:6): [True: 0, False: 2]
  ------------------
  510|      0|		ret = atoi(e);
  511|      0|		if (ret == 1)
  ------------------
  |  Branch (511:7): [True: 0, False: 0]
  ------------------
  512|      0|			return;
  513|      0|	}
  514|       |
  515|      2|	e = secure_getenv("GNUTLS_NO_EXPLICIT_INIT");
  516|      2|	if (e != NULL) {
  ------------------
  |  Branch (516:6): [True: 0, False: 2]
  ------------------
  517|      0|		_gnutls_debug_log(
  ------------------
  |  |  149|      0|#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  518|      0|			"GNUTLS_NO_EXPLICIT_INIT is deprecated; use GNUTLS_NO_IMPLICIT_INIT\n");
  519|      0|		ret = atoi(e);
  520|      0|		if (ret == 1)
  ------------------
  |  Branch (520:7): [True: 0, False: 0]
  ------------------
  521|      0|			return;
  522|      0|	}
  523|       |
  524|      2|	ret = _gnutls_global_init(1);
  525|      2|	if (ret < 0) {
  ------------------
  |  Branch (525:6): [True: 0, False: 2]
  ------------------
  526|      0|		fprintf(stderr, "Error in GnuTLS initialization: %s\n",
  527|      0|			gnutls_strerror(ret));
  528|      0|		_gnutls_switch_lib_state(LIB_STATE_ERROR);
  529|      0|	}
  530|      2|}
global.c:_gnutls_global_init:
  240|      2|{
  241|      2|	int ret = 0, res;
  242|      2|	int level;
  243|      2|	const char *e;
  244|       |
  245|      2|	if (!constructor) {
  ------------------
  |  Branch (245:6): [True: 0, False: 2]
  ------------------
  246|      0|		ret = gnutls_static_mutex_lock(&global_init_mutex);
  ------------------
  |  |   45|      0|	(unlikely(glthread_lock_lock(LOCK)) ?                \
  |  |  ------------------
  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  Branch (75:39): [True: 0, False: 0]
  |  |  |  |  |  Branch (75:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      0|		 gnutls_assert_val(GNUTLS_E_LOCKING_ERROR) : \
  |  |  ------------------
  |  |  |  |  196|      0|	gnutls_assert_val_int(x, __FILE__, __func__, __LINE__)
  |  |  ------------------
  |  |   47|      0|		 0)
  ------------------
  247|      0|		if (ret < 0) {
  ------------------
  |  Branch (247:7): [True: 0, False: 0]
  ------------------
  248|      0|			return gnutls_assert_val(ret);
  ------------------
  |  |  196|      0|	gnutls_assert_val_int(x, __FILE__, __func__, __LINE__)
  ------------------
  249|      0|		}
  250|      0|	}
  251|       |
  252|      2|	_gnutls_init++;
  253|      2|	if (_gnutls_init > 1) {
  ------------------
  |  Branch (253:6): [True: 0, False: 2]
  ------------------
  254|      0|		ret = _gnutls_init_ret;
  255|      0|		goto out;
  256|      0|	}
  257|       |
  258|      2|	_gnutls_switch_lib_state(LIB_STATE_INIT);
  259|       |
  260|      2|	e = secure_getenv("GNUTLS_DEBUG_LEVEL");
  261|      2|	if (e != NULL) {
  ------------------
  |  Branch (261:6): [True: 0, False: 2]
  ------------------
  262|      0|		level = atoi(e);
  263|      0|		gnutls_global_set_log_level(level);
  264|      0|		if (_gnutls_log_func == NULL)
  ------------------
  |  Branch (264:7): [True: 0, False: 0]
  ------------------
  265|      0|			gnutls_global_set_log_function(default_log_func);
  266|      0|		_gnutls_debug_log("Enabled GnuTLS " VERSION " logging...\n");
  ------------------
  |  |  149|      0|#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  267|      0|	}
  268|       |
  269|      2|#ifdef HAVE_DCGETTEXT
  270|      2|	bindtextdomain(PACKAGE, LOCALEDIR);
  ------------------
  |  | 1841|      2|#define PACKAGE "gnutls"
  ------------------
  271|      2|#endif
  272|       |
  273|      2|	res = gnutls_crypto_init();
  274|      2|	if (res != 0) {
  ------------------
  |  Branch (274:6): [True: 0, False: 2]
  ------------------
  275|      0|		gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  276|      0|		ret = GNUTLS_E_CRYPTO_INIT_FAILED;
  ------------------
  |  | 3492|      0|#define GNUTLS_E_CRYPTO_INIT_FAILED -318
  ------------------
  277|      0|		goto out;
  278|      0|	}
  279|       |
  280|      2|	ret = _gnutls_system_key_init();
  281|      2|	if (ret != 0) {
  ------------------
  |  Branch (281:6): [True: 0, False: 2]
  ------------------
  282|      0|		gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  283|      0|	}
  284|       |
  285|       |	/* initialize ASN.1 parser
  286|       |	 */
  287|      2|	if (asn1_check_version(GNUTLS_MIN_LIBTASN1_VERSION) == NULL) {
  ------------------
  |  |   46|      2|#define GNUTLS_MIN_LIBTASN1_VERSION "0.3.4"
  ------------------
  |  Branch (287:6): [True: 0, False: 2]
  ------------------
  288|      0|		gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  289|      0|		_gnutls_debug_log("Checking for libtasn1 failed: %s < %s\n",
  ------------------
  |  |  149|      0|#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  290|      0|				  asn1_check_version(NULL),
  291|      0|				  GNUTLS_MIN_LIBTASN1_VERSION);
  292|      0|		ret = GNUTLS_E_INCOMPATIBLE_LIBTASN1_LIBRARY;
  ------------------
  |  | 3443|      0|#define GNUTLS_E_INCOMPATIBLE_LIBTASN1_LIBRARY -203
  ------------------
  293|      0|		goto out;
  294|      0|	}
  295|       |
  296|      2|	_gnutls_pkix1_asn = NULL;
  297|      2|	res = asn1_array2tree(pkix_asn1_tab, &_gnutls_pkix1_asn, NULL);
  298|      2|	if (res != ASN1_SUCCESS) {
  ------------------
  |  |  116|      2|# define ASN1_SUCCESS			0
  ------------------
  |  Branch (298:6): [True: 0, False: 2]
  ------------------
  299|      0|		gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  300|      0|		ret = _gnutls_asn2err(res);
  301|      0|		goto out;
  302|      0|	}
  303|       |
  304|      2|	res = asn1_array2tree(gnutls_asn1_tab, &_gnutls_gnutls_asn, NULL);
  305|      2|	if (res != ASN1_SUCCESS) {
  ------------------
  |  |  116|      2|# define ASN1_SUCCESS			0
  ------------------
  |  Branch (305:6): [True: 0, False: 2]
  ------------------
  306|      0|		gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  307|      0|		ret = _gnutls_asn2err(res);
  308|      0|		goto out;
  309|      0|	}
  310|       |
  311|       |	/* Initialize the random generator */
  312|      2|	ret = _gnutls_rnd_preinit();
  313|      2|	if (ret < 0) {
  ------------------
  |  Branch (313:6): [True: 0, False: 2]
  ------------------
  314|      0|		gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  315|      0|		goto out;
  316|      0|	}
  317|       |
  318|       |	/* Initialize the default TLS extensions */
  319|      2|	ret = _gnutls_hello_ext_init();
  320|      2|	if (ret < 0) {
  ------------------
  |  Branch (320:6): [True: 0, False: 2]
  ------------------
  321|      0|		gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  322|      0|		goto out;
  323|      0|	}
  324|       |
  325|      2|	ret = gnutls_system_global_init();
  326|      2|	if (ret < 0) {
  ------------------
  |  Branch (326:6): [True: 0, False: 2]
  ------------------
  327|      0|		gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  328|      0|		goto out;
  329|      0|	}
  330|       |
  331|      2|#ifndef _WIN32
  332|      2|	ret = _gnutls_register_fork_handler();
  333|      2|	if (ret < 0) {
  ------------------
  |  Branch (333:6): [True: 0, False: 2]
  ------------------
  334|      0|		gnutls_assert();
  ------------------
  |  |   34|      0|	_gnutls_assert_log("ASSERT: %s[%s]:%d\n", __FILE__, __func__, __LINE__);
  |  |  ------------------
  |  |  |  |  150|      0|#define _gnutls_assert_log(...) LEVEL(3, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  335|      0|		goto out;
  336|      0|	}
  337|      2|#endif
  338|       |
  339|       |#ifdef ENABLE_FIPS140
  340|       |	res = _gnutls_fips_mode_enabled();
  341|       |	/* res == 1 -> fips140-2 mode enabled
  342|       |	 * res == 2 -> only self checks performed - but no failure
  343|       |	 * res == not in fips140 mode
  344|       |	 */
  345|       |	if (res != 0) {
  346|       |		_gnutls_debug_log("FIPS140-2 mode: %d\n", res);
  347|       |		_gnutls_priority_update_fips();
  348|       |
  349|       |		/* first round of self checks, these are done on the
  350|       |		 * nettle algorithms which are used internally */
  351|       |		_gnutls_switch_lib_state(LIB_STATE_SELFTEST);
  352|       |		ret = _gnutls_fips_perform_self_checks1();
  353|       |		if (ret < 0) {
  354|       |			_gnutls_switch_lib_state(LIB_STATE_ERROR);
  355|       |			_gnutls_audit_log(
  356|       |				NULL, "FIPS140-2 self testing part1 failed\n");
  357|       |			if (res != 2) {
  358|       |				gnutls_assert();
  359|       |				goto out;
  360|       |			}
  361|       |		}
  362|       |	}
  363|       |#endif
  364|       |
  365|      2|	_gnutls_register_accel_crypto();
  366|      2|	_gnutls_cryptodev_init();
  367|      2|	_gnutls_afalg_init();
  368|       |
  369|       |#ifdef ENABLE_FIPS140
  370|       |	/* These self tests are performed on the overridden algorithms
  371|       |	 * (e.g., AESNI overridden AES). They are after _gnutls_register_accel_crypto()
  372|       |	 * intentionally */
  373|       |	if (res != 0) {
  374|       |		_gnutls_switch_lib_state(LIB_STATE_SELFTEST);
  375|       |		ret = _gnutls_fips_perform_self_checks2();
  376|       |		if (ret < 0) {
  377|       |			_gnutls_switch_lib_state(LIB_STATE_ERROR);
  378|       |			_gnutls_audit_log(
  379|       |				NULL, "FIPS140-2 self testing part 2 failed\n");
  380|       |			if (res != 2) {
  381|       |				gnutls_assert();
  382|       |				goto out;
  383|       |			}
  384|       |		}
  385|       |		_gnutls_fips_mode_reset_zombie();
  386|       |	}
  387|       |#endif
  388|      2|	_gnutls_prepare_to_load_system_priorities();
  389|      2|	_gnutls_switch_lib_state(LIB_STATE_OPERATIONAL);
  390|      2|	ret = 0;
  391|       |
  392|      2|out:
  393|      2|	_gnutls_init_ret = ret;
  394|      2|	if (!constructor) {
  ------------------
  |  Branch (394:6): [True: 0, False: 2]
  ------------------
  395|      0|		(void)gnutls_static_mutex_unlock(&global_init_mutex);
  ------------------
  |  |   50|      0|	(unlikely(glthread_lock_unlock(LOCK)) ?              \
  |  |  ------------------
  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  Branch (75:39): [True: 0, False: 0]
  |  |  |  |  |  Branch (75:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   51|      0|		 gnutls_assert_val(GNUTLS_E_LOCKING_ERROR) : \
  |  |  ------------------
  |  |  |  |  196|      0|	gnutls_assert_val_int(x, __FILE__, __func__, __LINE__)
  |  |  ------------------
  |  |   52|      0|		 0)
  ------------------
  396|      0|	}
  397|      2|	return ret;
  398|      2|}

_gnutls_hello_ext_init:
  514|      2|{
  515|      2|	return GNUTLS_E_SUCCESS;
  ------------------
  |  | 3315|      2|#define GNUTLS_E_SUCCESS 0
  ------------------
  516|      2|}

_asn1_str_cat:
   33|    532|{
   34|    532|  size_t str_size = strlen (src);
   35|    532|  size_t dest_size = strlen (dest);
   36|       |
   37|    532|  if (dest_tot_size - dest_size > str_size)
  ------------------
  |  Branch (37:7): [True: 532, False: 0]
  ------------------
   38|    532|    {
   39|    532|      strcat (dest, src);
   40|    532|    }
   41|      0|  else
   42|      0|    {
   43|      0|      if (dest_tot_size > dest_size)
  ------------------
  |  Branch (43:11): [True: 0, False: 0]
  ------------------
   44|      0|	{
   45|      0|	  strncat (dest, src, (dest_tot_size - dest_size) - 1);
   46|      0|	  dest[dest_tot_size - 1] = 0;
   47|      0|	}
   48|      0|    }
   49|    532|}
_asn1_str_cpy:
   54|  1.43k|{
   55|  1.43k|  size_t str_size = strlen (src);
   56|       |
   57|  1.43k|  if (dest_tot_size > str_size)
  ------------------
  |  Branch (57:7): [True: 1.43k, False: 0]
  ------------------
   58|  1.43k|    {
   59|  1.43k|      strcpy (dest, src);
   60|  1.43k|      return str_size;
   61|  1.43k|    }
   62|      0|  else
   63|      0|    {
   64|      0|      if (dest_tot_size > 0)
  ------------------
  |  Branch (64:11): [True: 0, False: 0]
  ------------------
   65|      0|	{
   66|      0|	  str_size = dest_tot_size - 1;
   67|      0|	  memcpy (dest, src, str_size);
   68|      0|	  dest[str_size] = 0;
   69|      0|	  return str_size;
   70|      0|	}
   71|      0|      else
   72|      0|	return 0;
   73|      0|    }
   74|  1.43k|}

parser_aux.c:type_field:
  179|  5.64k|{
  180|  5.64k|  return (ntype & 0xff);
  181|  5.64k|}
structure.c:convert_old_type:
  186|  1.14k|{
  187|  1.14k|  unsigned int type = ntype & 0xff;
  188|  1.14k|  if (type == ASN1_ETYPE_TIME)
  ------------------
  |  |  172|  1.14k|# define ASN1_ETYPE_TIME 17
  ------------------
  |  Branch (188:7): [True: 0, False: 1.14k]
  ------------------
  189|      0|    {
  190|      0|      if (ntype & CONST_UTC)
  ------------------
  |  |  160|      0|# define CONST_UTC         (1U<<24)
  ------------------
  |  Branch (190:11): [True: 0, False: 0]
  ------------------
  191|      0|	type = ASN1_ETYPE_UTC_TIME;
  ------------------
  |  |  244|      0|# define ASN1_ETYPE_UTC_TIME       36
  ------------------
  192|      0|      else
  193|      0|	type = ASN1_ETYPE_GENERALIZED_TIME;
  ------------------
  |  |  245|      0|# define ASN1_ETYPE_GENERALIZED_TIME 37
  ------------------
  194|       |
  195|      0|      ntype &= ~(CONST_UTC | CONST_GENERALIZED);
  ------------------
  |  |  160|      0|# define CONST_UTC         (1U<<24)
  ------------------
                    ntype &= ~(CONST_UTC | CONST_GENERALIZED);
  ------------------
  |  |  159|      0|# define CONST_GENERALIZED (1U<<23)
  ------------------
  196|      0|      ntype &= 0xffffff00;
  197|      0|      ntype |= type;
  198|       |
  199|      0|      return ntype;
  200|      0|    }
  201|  1.14k|  else
  202|  1.14k|    return ntype;
  203|  1.14k|}

_asn1_add_static_node:
   66|  1.14k|{
   67|  1.14k|  list_type *p;
   68|  1.14k|  asn1_node punt;
   69|       |
   70|  1.14k|  punt = calloc (1, sizeof (struct asn1_node_st));
   71|  1.14k|  if (punt == NULL)
  ------------------
  |  Branch (71:7): [True: 0, False: 1.14k]
  ------------------
   72|      0|    return NULL;
   73|       |
   74|  1.14k|  p = malloc (sizeof (list_type));
   75|  1.14k|  if (p == NULL)
  ------------------
  |  Branch (75:7): [True: 0, False: 1.14k]
  ------------------
   76|      0|    {
   77|      0|      free (punt);
   78|      0|      return NULL;
   79|      0|    }
   80|       |
   81|  1.14k|  p->node = punt;
   82|  1.14k|  p->next = *e_list;
   83|  1.14k|  *e_list = p;
   84|       |
   85|  1.14k|  punt->type = type;
   86|       |
   87|  1.14k|  return punt;
   88|  1.14k|}
asn1_find_node:
  122|    266|{
  123|    266|  asn1_node_const p;
  124|    266|  char *n_end, n[ASN1_MAX_NAME_SIZE + 1];
  125|    266|  const char *n_start;
  126|    266|  unsigned int nsize;
  127|    266|  unsigned int nhash;
  128|       |
  129|    266|  if (pointer == NULL)
  ------------------
  |  Branch (129:7): [True: 0, False: 266]
  ------------------
  130|      0|    return NULL;
  131|       |
  132|    266|  if (name == NULL)
  ------------------
  |  Branch (132:7): [True: 0, False: 266]
  ------------------
  133|      0|    return NULL;
  134|       |
  135|    266|  p = pointer;
  136|    266|  n_start = name;
  137|       |
  138|    266|  if (name[0] == '?' && name[1] == 'C' && p->name[0] == '?')
  ------------------
  |  Branch (138:7): [True: 0, False: 266]
  |  Branch (138:25): [True: 0, False: 0]
  |  Branch (138:43): [True: 0, False: 0]
  ------------------
  139|      0|    {				/* ?CURRENT */
  140|      0|      n_start = strchr (n_start, '.');
  141|      0|      if (n_start)
  ------------------
  |  Branch (141:11): [True: 0, False: 0]
  ------------------
  142|      0|	n_start++;
  143|      0|    }
  144|    266|  else if (p->name[0] != 0)
  ------------------
  |  Branch (144:12): [True: 266, False: 0]
  ------------------
  145|    266|    {				/* has *pointer got a name ? */
  146|    266|      n_end = strchr (n_start, '.');	/* search the first dot */
  147|    266|      if (n_end)
  ------------------
  |  Branch (147:11): [True: 266, False: 0]
  ------------------
  148|    266|	{
  149|    266|	  nsize = n_end - n_start;
  150|    266|	  if (nsize >= sizeof (n))
  ------------------
  |  Branch (150:8): [True: 0, False: 266]
  ------------------
  151|      0|	    return NULL;
  152|       |
  153|    266|	  memcpy (n, n_start, nsize);
  154|    266|	  n[nsize] = 0;
  155|    266|	  n_start = n_end;
  156|    266|	  n_start++;
  157|       |
  158|    266|	  nhash = _asn1_hash_name (n);
  159|    266|	}
  160|      0|      else
  161|      0|	{
  162|      0|	  _asn1_str_cpy (n, sizeof (n), n_start);
  163|      0|	  nhash = _asn1_hash_name (n);
  164|       |
  165|      0|	  n_start = NULL;
  166|      0|	}
  167|       |
  168|    266|      while (p)
  ------------------
  |  Branch (168:14): [True: 266, False: 0]
  ------------------
  169|    266|	{
  170|    266|	  if (nhash == p->name_hash && (!strcmp (p->name, n)))
  ------------------
  |  Branch (170:8): [True: 266, False: 0]
  |  Branch (170:33): [True: 266, False: 0]
  ------------------
  171|    266|	    break;
  172|      0|	  else
  173|      0|	    p = p->right;
  174|    266|	}			/* while */
  175|       |
  176|    266|      if (p == NULL)
  ------------------
  |  Branch (176:11): [True: 0, False: 266]
  ------------------
  177|      0|	return NULL;
  178|    266|    }
  179|      0|  else
  180|      0|    {				/* *pointer doesn't have a name */
  181|      0|      if (n_start[0] == 0)
  ------------------
  |  Branch (181:11): [True: 0, False: 0]
  ------------------
  182|      0|	return (asn1_node) p;
  183|      0|    }
  184|       |
  185|    532|  while (n_start)
  ------------------
  |  Branch (185:10): [True: 266, False: 266]
  ------------------
  186|    266|    {				/* Has the end of NAME been reached? */
  187|    266|      n_end = strchr (n_start, '.');	/* search the next dot */
  188|    266|      if (n_end)
  ------------------
  |  Branch (188:11): [True: 0, False: 266]
  ------------------
  189|      0|	{
  190|      0|	  nsize = n_end - n_start;
  191|      0|	  if (nsize >= sizeof (n))
  ------------------
  |  Branch (191:8): [True: 0, False: 0]
  ------------------
  192|      0|	    return NULL;
  193|       |
  194|      0|	  memcpy (n, n_start, nsize);
  195|      0|	  n[nsize] = 0;
  196|      0|	  n_start = n_end;
  197|      0|	  n_start++;
  198|       |
  199|      0|	  nhash = _asn1_hash_name (n);
  200|      0|	}
  201|    266|      else
  202|    266|	{
  203|    266|	  _asn1_str_cpy (n, sizeof (n), n_start);
  204|    266|	  nhash = _asn1_hash_name (n);
  205|    266|	  n_start = NULL;
  206|    266|	}
  207|       |
  208|    266|      if (p->down == NULL)
  ------------------
  |  Branch (208:11): [True: 0, False: 266]
  ------------------
  209|      0|	return NULL;
  210|       |
  211|    266|      p = p->down;
  212|    266|      if (p == NULL)
  ------------------
  |  Branch (212:11): [True: 0, False: 266]
  ------------------
  213|      0|	return NULL;
  214|       |
  215|       |      /* The identifier "?LAST" indicates the last element
  216|       |         in the right chain. */
  217|    266|      if (n[0] == '?' && n[1] == 'L')	/* ?LAST */
  ------------------
  |  Branch (217:11): [True: 0, False: 266]
  |  Branch (217:26): [True: 0, False: 0]
  ------------------
  218|      0|	{
  219|      0|	  while (p->right)
  ------------------
  |  Branch (219:11): [True: 0, False: 0]
  ------------------
  220|      0|	    p = p->right;
  221|      0|	}
  222|    266|      else
  223|    266|	{			/* no "?LAST" */
  224|  11.1k|	  while (p)
  ------------------
  |  Branch (224:11): [True: 11.1k, False: 0]
  ------------------
  225|  11.1k|	    {
  226|  11.1k|	      if (p->name_hash == nhash && !strcmp (p->name, n))
  ------------------
  |  Branch (226:12): [True: 266, False: 10.8k]
  |  Branch (226:37): [True: 266, False: 0]
  ------------------
  227|    266|		break;
  228|  10.8k|	      else
  229|  10.8k|		p = p->right;
  230|  11.1k|	    }
  231|    266|	}
  232|    266|      if (p == NULL)
  ------------------
  |  Branch (232:11): [True: 0, False: 266]
  ------------------
  233|      0|	return NULL;
  234|    266|    }				/* while */
  235|       |
  236|    266|  return (asn1_node) p;
  237|    266|}
_asn1_set_value:
  252|    462|{
  253|    462|  if (node == NULL)
  ------------------
  |  Branch (253:7): [True: 0, False: 462]
  ------------------
  254|      0|    return node;
  255|    462|  if (node->value)
  ------------------
  |  Branch (255:7): [True: 0, False: 462]
  ------------------
  256|      0|    {
  257|      0|      if (node->value != node->small_value)
  ------------------
  |  Branch (257:11): [True: 0, False: 0]
  ------------------
  258|      0|	free (node->value);
  259|      0|      node->value = NULL;
  260|      0|      node->value_len = 0;
  261|      0|    }
  262|       |
  263|    462|  if (!len)
  ------------------
  |  Branch (263:7): [True: 0, False: 462]
  ------------------
  264|      0|    return node;
  265|       |
  266|    462|  if (len < sizeof (node->small_value))
  ------------------
  |  Branch (266:7): [True: 314, False: 148]
  ------------------
  267|    314|    {
  268|    314|      node->value = node->small_value;
  269|    314|    }
  270|    148|  else
  271|    148|    {
  272|    148|      node->value = malloc (len);
  273|    148|      if (node->value == NULL)
  ------------------
  |  Branch (273:11): [True: 0, False: 148]
  ------------------
  274|      0|	return NULL;
  275|    148|    }
  276|    462|  node->value_len = len;
  277|       |
  278|    462|  memcpy (node->value, value, len);
  279|    462|  return node;
  280|    462|}
_asn1_set_name:
  409|    898|{
  410|    898|  if (node == NULL)
  ------------------
  |  Branch (410:7): [True: 0, False: 898]
  ------------------
  411|      0|    return node;
  412|       |
  413|    898|  _asn1_str_cpy (node->name, sizeof (node->name), name ? name : "");
  ------------------
  |  Branch (413:51): [True: 898, False: 0]
  ------------------
  414|    898|  node->name_hash = _asn1_hash_name (node->name);
  415|       |
  416|    898|  return node;
  417|    898|}
_asn1_set_right:
  457|    714|{
  458|    714|  if (node == NULL)
  ------------------
  |  Branch (458:7): [True: 0, False: 714]
  ------------------
  459|      0|    return node;
  460|    714|  node->right = right;
  461|    714|  if (right)
  ------------------
  |  Branch (461:7): [True: 714, False: 0]
  ------------------
  462|    714|    right->left = node;
  463|    714|  return node;
  464|    714|}
_asn1_find_up:
  523|  2.12k|{
  524|  2.12k|  asn1_node_const p;
  525|       |
  526|  2.12k|  if (node == NULL)
  ------------------
  |  Branch (526:7): [True: 0, False: 2.12k]
  ------------------
  527|      0|    return NULL;
  528|       |
  529|  2.12k|  p = node;
  530|       |
  531|  5.69k|  while ((p->left != NULL) && (p->left->right == p))
  ------------------
  |  Branch (531:10): [True: 5.69k, False: 0]
  |  Branch (531:31): [True: 3.57k, False: 2.12k]
  ------------------
  532|  3.57k|    p = p->left;
  533|       |
  534|  2.12k|  return p->left;
  535|  2.12k|}
_asn1_delete_list:
  581|      4|{
  582|      4|  list_type *p;
  583|       |
  584|  1.14k|  while (e_list)
  ------------------
  |  Branch (584:10): [True: 1.14k, False: 4]
  ------------------
  585|  1.14k|    {
  586|  1.14k|      p = e_list;
  587|  1.14k|      e_list = e_list->next;
  588|  1.14k|      free (p);
  589|  1.14k|    }
  590|      4|}
_asn1_change_integer_value:
  662|      4|{
  663|      4|  asn1_node p;
  664|      4|  unsigned char val[SIZEOF_UNSIGNED_LONG_INT];
  665|      4|  unsigned char val2[SIZEOF_UNSIGNED_LONG_INT + 1];
  666|      4|  int len;
  667|       |
  668|      4|  if (node == NULL)
  ------------------
  |  Branch (668:7): [True: 0, False: 4]
  ------------------
  669|      0|    return ASN1_ELEMENT_NOT_FOUND;
  ------------------
  |  |  118|      0|# define ASN1_ELEMENT_NOT_FOUND		2
  ------------------
  670|       |
  671|      4|  p = node;
  672|  1.14k|  while (p)
  ------------------
  |  Branch (672:10): [True: 1.14k, False: 4]
  ------------------
  673|  1.14k|    {
  674|  1.14k|      if ((type_field (p->type) == ASN1_ETYPE_INTEGER)
  ------------------
  |  |  217|  1.14k|# define ASN1_ETYPE_INTEGER        3
  ------------------
  |  Branch (674:11): [True: 124, False: 1.01k]
  ------------------
  675|  1.14k|	  && (p->type & CONST_ASSIGN))
  ------------------
  |  |  166|    124|# define CONST_ASSIGN      (1U<<28)
  ------------------
  |  Branch (675:7): [True: 0, False: 124]
  ------------------
  676|      0|	{
  677|      0|	  if (p->value)
  ------------------
  |  Branch (677:8): [True: 0, False: 0]
  ------------------
  678|      0|	    {
  679|      0|	      _asn1_convert_integer (p->value, val, sizeof (val), &len);
  680|      0|	      asn1_octet_der (val, len, val2, &len);
  681|      0|	      _asn1_set_value (p, val2, len);
  682|      0|	    }
  683|      0|	}
  684|       |
  685|  1.14k|      if (p->down)
  ------------------
  |  Branch (685:11): [True: 424, False: 718]
  ------------------
  686|    424|	{
  687|    424|	  p = p->down;
  688|    424|	}
  689|    718|      else
  690|    718|	{
  691|    718|	  if (p == node)
  ------------------
  |  Branch (691:8): [True: 0, False: 718]
  ------------------
  692|      0|	    p = NULL;
  693|    718|	  else if (p->right)
  ------------------
  |  Branch (693:13): [True: 392, False: 326]
  ------------------
  694|    392|	    p = p->right;
  695|    326|	  else
  696|    326|	    {
  697|    424|	      while (1)
  ------------------
  |  Branch (697:15): [Folded - Ignored]
  ------------------
  698|    424|		{
  699|    424|		  p = _asn1_find_up (p);
  700|    424|		  if (p == node)
  ------------------
  |  Branch (700:9): [True: 4, False: 420]
  ------------------
  701|      4|		    {
  702|      4|		      p = NULL;
  703|      4|		      break;
  704|      4|		    }
  705|    420|		  if (p && p->right)
  ------------------
  |  Branch (705:9): [True: 420, False: 0]
  |  Branch (705:14): [True: 322, False: 98]
  ------------------
  706|    322|		    {
  707|    322|		      p = p->right;
  708|    322|		      break;
  709|    322|		    }
  710|    420|		}
  711|    326|	    }
  712|    718|	}
  713|  1.14k|    }
  714|       |
  715|      4|  return ASN1_SUCCESS;
  ------------------
  |  |  116|      4|# define ASN1_SUCCESS			0
  ------------------
  716|      4|}
_asn1_expand_object_id:
  731|      4|{
  732|      4|  asn1_node p, p2, p3, p4, p5;
  733|      4|  char name_root[ASN1_MAX_NAME_SIZE], name2[2 * ASN1_MAX_NAME_SIZE + 1];
  734|      4|  int move, tlen, tries;
  735|      4|  unsigned max_constants;
  736|       |
  737|      4|  if (node == NULL)
  ------------------
  |  Branch (737:7): [True: 0, False: 4]
  ------------------
  738|      0|    return ASN1_ELEMENT_NOT_FOUND;
  ------------------
  |  |  118|      0|# define ASN1_ELEMENT_NOT_FOUND		2
  ------------------
  739|       |
  740|      4|  _asn1_str_cpy (name_root, sizeof (name_root), node->name);
  741|       |
  742|      4|  p = node;
  743|      4|  move = DOWN;
  ------------------
  |  |  131|      4|# define DOWN   3
  ------------------
  744|      4|  tries = 0;
  745|       |
  746|  1.56k|  while (!((p == node) && (move == UP)))
  ------------------
  |  |  129|      8|# define UP     1
  ------------------
  |  Branch (746:12): [True: 8, False: 1.55k]
  |  Branch (746:27): [True: 4, False: 4]
  ------------------
  747|  1.56k|    {
  748|  1.56k|      if (move != UP)
  ------------------
  |  |  129|  1.56k|# define UP     1
  ------------------
  |  Branch (748:11): [True: 1.14k, False: 420]
  ------------------
  749|  1.14k|	{
  750|  1.14k|	  if ((type_field (p->type) == ASN1_ETYPE_OBJECT_ID)
  ------------------
  |  |  226|  1.14k|# define ASN1_ETYPE_OBJECT_ID     12
  ------------------
  |  Branch (750:8): [True: 68, False: 1.07k]
  ------------------
  751|  1.14k|	      && (p->type & CONST_ASSIGN))
  ------------------
  |  |  166|     68|# define CONST_ASSIGN      (1U<<28)
  ------------------
  |  Branch (751:11): [True: 2, False: 66]
  ------------------
  752|      2|	    {
  753|      2|	      p2 = p->down;
  754|      2|	      if (p2 && (type_field (p2->type) == ASN1_ETYPE_CONSTANT))
  ------------------
  |  |  215|      2|# define ASN1_ETYPE_CONSTANT       1
  ------------------
  |  Branch (754:12): [True: 2, False: 0]
  |  Branch (754:18): [True: 2, False: 0]
  ------------------
  755|      2|		{
  756|      2|		  if (p2->value && !c_isdigit (p2->value[0]))
  ------------------
  |  Branch (756:9): [True: 2, False: 0]
  |  Branch (756:22): [True: 0, False: 2]
  ------------------
  757|      0|		    {
  758|      0|		      _asn1_str_cpy (name2, sizeof (name2), name_root);
  759|      0|		      _asn1_str_cat (name2, sizeof (name2), ".");
  760|      0|		      _asn1_str_cat (name2, sizeof (name2),
  761|      0|				     (char *) p2->value);
  762|      0|		      p3 = asn1_find_node (node, name2);
  763|      0|		      if (!p3 || _asn1_is_up (p2, p3) ||
  ------------------
  |  Branch (763:13): [True: 0, False: 0]
  |  Branch (763:20): [True: 0, False: 0]
  ------------------
  764|      0|			  (type_field (p3->type) != ASN1_ETYPE_OBJECT_ID) ||
  ------------------
  |  |  226|      0|# define ASN1_ETYPE_OBJECT_ID     12
  ------------------
  |  Branch (764:6): [True: 0, False: 0]
  ------------------
  765|      0|			  !(p3->type & CONST_ASSIGN))
  ------------------
  |  |  166|      0|# define CONST_ASSIGN      (1U<<28)
  ------------------
  |  Branch (765:6): [True: 0, False: 0]
  ------------------
  766|      0|			return ASN1_ELEMENT_NOT_FOUND;
  ------------------
  |  |  118|      0|# define ASN1_ELEMENT_NOT_FOUND		2
  ------------------
  767|       |
  768|      0|		      _asn1_set_down (p, p2->right);
  769|      0|		      if (p2->down)
  ------------------
  |  Branch (769:13): [True: 0, False: 0]
  ------------------
  770|      0|			_asn1_delete_structure (*list, &p2->down, 0);
  771|      0|		      _asn1_delete_node_from_list (*list, p2);
  772|      0|		      _asn1_remove_node (p2, 0);
  773|      0|		      p2 = p;
  774|      0|		      p4 = p3->down;
  775|      0|		      max_constants = 0;
  776|      0|		      while (p4)
  ------------------
  |  Branch (776:16): [True: 0, False: 0]
  ------------------
  777|      0|			{
  778|      0|			  if (type_field (p4->type) == ASN1_ETYPE_CONSTANT)
  ------------------
  |  |  215|      0|# define ASN1_ETYPE_CONSTANT       1
  ------------------
  |  Branch (778:10): [True: 0, False: 0]
  ------------------
  779|      0|			    {
  780|      0|			      max_constants++;
  781|      0|			      if (max_constants == MAX_CONSTANTS)
  ------------------
  |  |  718|      0|#define MAX_CONSTANTS 1024
  ------------------
  |  Branch (781:14): [True: 0, False: 0]
  ------------------
  782|      0|				return ASN1_RECURSION;
  ------------------
  |  |  135|      0|# define ASN1_RECURSION			19
  ------------------
  783|       |
  784|      0|			      p5 =
  785|      0|				_asn1_add_single_node (ASN1_ETYPE_CONSTANT);
  ------------------
  |  |  215|      0|# define ASN1_ETYPE_CONSTANT       1
  ------------------
  786|      0|			      _asn1_set_name (p5, p4->name);
  787|      0|			      if (p4->value)
  ------------------
  |  Branch (787:14): [True: 0, False: 0]
  ------------------
  788|      0|				{
  789|      0|				  tlen = _asn1_strlen (p4->value);
  ------------------
  |  |  113|      0|# define _asn1_strlen(s) strlen((const char *) s)
  ------------------
  790|      0|				  if (tlen > 0)
  ------------------
  |  Branch (790:11): [True: 0, False: 0]
  ------------------
  791|      0|				    _asn1_set_value (p5, p4->value, tlen + 1);
  792|      0|				}
  793|      0|			      _asn1_add_static_node2 (list, p5);
  794|       |
  795|      0|			      if (p2 == p)
  ------------------
  |  Branch (795:14): [True: 0, False: 0]
  ------------------
  796|      0|				{
  797|      0|				  _asn1_set_right (p5, p->down);
  798|      0|				  _asn1_set_down (p, p5);
  799|      0|				}
  800|      0|			      else
  801|      0|				{
  802|      0|				  _asn1_set_right (p5, p2->right);
  803|      0|				  _asn1_set_right (p2, p5);
  804|      0|				}
  805|      0|			      p2 = p5;
  806|      0|			    }
  807|      0|			  p4 = p4->right;
  808|      0|			}
  809|      0|		      move = DOWN;
  ------------------
  |  |  131|      0|# define DOWN   3
  ------------------
  810|       |
  811|      0|		      tries++;
  812|      0|		      if (tries >= EXPAND_OBJECT_ID_MAX_RECURSION)
  ------------------
  |  |   76|      0|# define EXPAND_OBJECT_ID_MAX_RECURSION 16
  ------------------
  |  Branch (812:13): [True: 0, False: 0]
  ------------------
  813|      0|			return ASN1_RECURSION;
  ------------------
  |  |  135|      0|# define ASN1_RECURSION			19
  ------------------
  814|       |
  815|      0|		      continue;
  816|      0|		    }
  817|      2|		}
  818|      2|	    }
  819|  1.14k|	  move = DOWN;
  ------------------
  |  |  131|  1.14k|# define DOWN   3
  ------------------
  820|  1.14k|	}
  821|    420|      else
  822|    420|	move = RIGHT;
  ------------------
  |  |  130|    420|# define RIGHT  2
  ------------------
  823|       |
  824|  1.56k|      tries = 0;
  825|  1.56k|      if (move == DOWN)
  ------------------
  |  |  131|  1.56k|# define DOWN   3
  ------------------
  |  Branch (825:11): [True: 1.14k, False: 420]
  ------------------
  826|  1.14k|	{
  827|  1.14k|	  if (p->down)
  ------------------
  |  Branch (827:8): [True: 424, False: 718]
  ------------------
  828|    424|	    p = p->down;
  829|    718|	  else
  830|    718|	    move = RIGHT;
  ------------------
  |  |  130|    718|# define RIGHT  2
  ------------------
  831|  1.14k|	}
  832|       |
  833|  1.56k|      if (p == node)
  ------------------
  |  Branch (833:11): [True: 0, False: 1.56k]
  ------------------
  834|      0|	{
  835|      0|	  move = UP;
  ------------------
  |  |  129|      0|# define UP     1
  ------------------
  836|      0|	  continue;
  837|      0|	}
  838|       |
  839|  1.56k|      if (move == RIGHT)
  ------------------
  |  |  130|  1.56k|# define RIGHT  2
  ------------------
  |  Branch (839:11): [True: 1.13k, False: 424]
  ------------------
  840|  1.13k|	{
  841|  1.13k|	  if (p && p->right)
  ------------------
  |  Branch (841:8): [True: 1.13k, False: 0]
  |  Branch (841:13): [True: 714, False: 424]
  ------------------
  842|    714|	    p = p->right;
  843|    424|	  else
  844|    424|	    move = UP;
  ------------------
  |  |  129|    424|# define UP     1
  ------------------
  845|  1.13k|	}
  846|  1.56k|      if (move == UP)
  ------------------
  |  |  129|  1.56k|# define UP     1
  ------------------
  |  Branch (846:11): [True: 424, False: 1.13k]
  ------------------
  847|    424|	p = _asn1_find_up (p);
  848|  1.56k|    }
  849|       |
  850|       |  /*******************************/
  851|       |  /*       expand DEFAULT        */
  852|       |  /*******************************/
  853|      4|  p = node;
  854|      4|  move = DOWN;
  ------------------
  |  |  131|      4|# define DOWN   3
  ------------------
  855|       |
  856|  1.56k|  while (!((p == node) && (move == UP)))
  ------------------
  |  |  129|      8|# define UP     1
  ------------------
  |  Branch (856:12): [True: 8, False: 1.55k]
  |  Branch (856:27): [True: 4, False: 4]
  ------------------
  857|  1.56k|    {
  858|  1.56k|      if (move != UP)
  ------------------
  |  |  129|  1.56k|# define UP     1
  ------------------
  |  Branch (858:11): [True: 1.14k, False: 420]
  ------------------
  859|  1.14k|	{
  860|  1.14k|	  if ((type_field (p->type) == ASN1_ETYPE_OBJECT_ID) &&
  ------------------
  |  |  226|  1.14k|# define ASN1_ETYPE_OBJECT_ID     12
  ------------------
  |  Branch (860:8): [True: 68, False: 1.07k]
  ------------------
  861|  1.14k|	      (p->type & CONST_DEFAULT))
  ------------------
  |  |  145|     68|# define CONST_DEFAULT     (1U<<15)
  ------------------
  |  Branch (861:8): [True: 0, False: 68]
  ------------------
  862|      0|	    {
  863|      0|	      p2 = p->down;
  864|      0|	      if (p2 && (type_field (p2->type) == ASN1_ETYPE_DEFAULT))
  ------------------
  |  |  223|      0|# define ASN1_ETYPE_DEFAULT        9
  ------------------
  |  Branch (864:12): [True: 0, False: 0]
  |  Branch (864:18): [True: 0, False: 0]
  ------------------
  865|      0|		{
  866|      0|		  _asn1_str_cpy (name2, sizeof (name2), name_root);
  867|      0|		  _asn1_str_cat (name2, sizeof (name2), ".");
  868|      0|		  if (p2->value)
  ------------------
  |  Branch (868:9): [True: 0, False: 0]
  ------------------
  869|      0|		    _asn1_str_cat (name2, sizeof (name2), (char *) p2->value);
  870|      0|		  p3 = asn1_find_node (node, name2);
  871|      0|		  if (!p3 || (type_field (p3->type) != ASN1_ETYPE_OBJECT_ID)
  ------------------
  |  |  226|      0|# define ASN1_ETYPE_OBJECT_ID     12
  ------------------
  |  Branch (871:9): [True: 0, False: 0]
  |  Branch (871:16): [True: 0, False: 0]
  ------------------
  872|      0|		      || !(p3->type & CONST_ASSIGN))
  ------------------
  |  |  166|      0|# define CONST_ASSIGN      (1U<<28)
  ------------------
  |  Branch (872:12): [True: 0, False: 0]
  ------------------
  873|      0|		    return ASN1_ELEMENT_NOT_FOUND;
  ------------------
  |  |  118|      0|# define ASN1_ELEMENT_NOT_FOUND		2
  ------------------
  874|      0|		  p4 = p3->down;
  875|      0|		  name2[0] = 0;
  876|      0|		  while (p4)
  ------------------
  |  Branch (876:12): [True: 0, False: 0]
  ------------------
  877|      0|		    {
  878|      0|		      if (type_field (p4->type) == ASN1_ETYPE_CONSTANT)
  ------------------
  |  |  215|      0|# define ASN1_ETYPE_CONSTANT       1
  ------------------
  |  Branch (878:13): [True: 0, False: 0]
  ------------------
  879|      0|			{
  880|      0|			  if (p4->value == NULL)
  ------------------
  |  Branch (880:10): [True: 0, False: 0]
  ------------------
  881|      0|			    return ASN1_VALUE_NOT_FOUND;
  ------------------
  |  |  121|      0|# define ASN1_VALUE_NOT_FOUND		5
  ------------------
  882|       |
  883|      0|			  if (name2[0])
  ------------------
  |  Branch (883:10): [True: 0, False: 0]
  ------------------
  884|      0|			    _asn1_str_cat (name2, sizeof (name2), ".");
  885|      0|			  _asn1_str_cat (name2, sizeof (name2),
  886|      0|					 (char *) p4->value);
  887|      0|			}
  888|      0|		      p4 = p4->right;
  889|      0|		    }
  890|      0|		  tlen = strlen (name2);
  891|      0|		  if (tlen > 0)
  ------------------
  |  Branch (891:9): [True: 0, False: 0]
  ------------------
  892|      0|		    _asn1_set_value (p2, name2, tlen + 1);
  893|      0|		}
  894|      0|	    }
  895|  1.14k|	  move = DOWN;
  ------------------
  |  |  131|  1.14k|# define DOWN   3
  ------------------
  896|  1.14k|	}
  897|    420|      else
  898|    420|	move = RIGHT;
  ------------------
  |  |  130|    420|# define RIGHT  2
  ------------------
  899|       |
  900|  1.56k|      if (move == DOWN)
  ------------------
  |  |  131|  1.56k|# define DOWN   3
  ------------------
  |  Branch (900:11): [True: 1.14k, False: 420]
  ------------------
  901|  1.14k|	{
  902|  1.14k|	  if (p->down)
  ------------------
  |  Branch (902:8): [True: 424, False: 718]
  ------------------
  903|    424|	    p = p->down;
  904|    718|	  else
  905|    718|	    move = RIGHT;
  ------------------
  |  |  130|    718|# define RIGHT  2
  ------------------
  906|  1.14k|	}
  907|       |
  908|  1.56k|      if (p == node)
  ------------------
  |  Branch (908:11): [True: 0, False: 1.56k]
  ------------------
  909|      0|	{
  910|      0|	  move = UP;
  ------------------
  |  |  129|      0|# define UP     1
  ------------------
  911|      0|	  continue;
  912|      0|	}
  913|       |
  914|  1.56k|      if (move == RIGHT)
  ------------------
  |  |  130|  1.56k|# define RIGHT  2
  ------------------
  |  Branch (914:11): [True: 1.13k, False: 424]
  ------------------
  915|  1.13k|	{
  916|  1.13k|	  if (p && p->right)
  ------------------
  |  Branch (916:8): [True: 1.13k, False: 0]
  |  Branch (916:13): [True: 714, False: 424]
  ------------------
  917|    714|	    p = p->right;
  918|    424|	  else
  919|    424|	    move = UP;
  ------------------
  |  |  129|    424|# define UP     1
  ------------------
  920|  1.13k|	}
  921|  1.56k|      if (move == UP)
  ------------------
  |  |  129|  1.56k|# define UP     1
  ------------------
  |  Branch (921:11): [True: 424, False: 1.13k]
  ------------------
  922|    424|	p = _asn1_find_up (p);
  923|  1.56k|    }
  924|       |
  925|      4|  return ASN1_SUCCESS;
  ------------------
  |  |  116|      4|# define ASN1_SUCCESS			0
  ------------------
  926|      4|}
_asn1_check_identifier:
 1014|      4|{
 1015|      4|  asn1_node_const p, p2;
 1016|      4|  char name2[ASN1_MAX_NAME_SIZE * 2 + 2];
 1017|       |
 1018|      4|  if (node == NULL)
  ------------------
  |  Branch (1018:7): [True: 0, False: 4]
  ------------------
 1019|      0|    return ASN1_ELEMENT_NOT_FOUND;
  ------------------
  |  |  118|      0|# define ASN1_ELEMENT_NOT_FOUND		2
  ------------------
 1020|       |
 1021|      4|  p = node;
 1022|  1.14k|  while (p)
  ------------------
  |  Branch (1022:10): [True: 1.14k, False: 4]
  ------------------
 1023|  1.14k|    {
 1024|  1.14k|      if (p->value && type_field (p->type) == ASN1_ETYPE_IDENTIFIER)
  ------------------
  |  |  216|    462|# define ASN1_ETYPE_IDENTIFIER     2
  ------------------
  |  Branch (1024:11): [True: 462, False: 680]
  |  Branch (1024:23): [True: 266, False: 196]
  ------------------
 1025|    266|	{
 1026|    266|	  _asn1_str_cpy (name2, sizeof (name2), node->name);
 1027|    266|	  _asn1_str_cat (name2, sizeof (name2), ".");
 1028|    266|	  _asn1_str_cat (name2, sizeof (name2), (char *) p->value);
 1029|    266|	  p2 = asn1_find_node (node, name2);
 1030|    266|	  if (p2 == NULL)
  ------------------
  |  Branch (1030:8): [True: 0, False: 266]
  ------------------
 1031|      0|	    {
 1032|      0|	      if (p->value)
  ------------------
  |  Branch (1032:12): [True: 0, False: 0]
  ------------------
 1033|      0|		_asn1_str_cpy (_asn1_identifierMissing,
 1034|      0|			       sizeof (_asn1_identifierMissing),
 1035|      0|			       (char *) p->value);
 1036|      0|	      else
 1037|      0|		_asn1_strcpy (_asn1_identifierMissing, "(null)");
  ------------------
  |  |  117|      0|# define _asn1_strcpy(a,b) strcpy((char *)a, (const char *)b)
  ------------------
 1038|      0|	      return ASN1_IDENTIFIER_NOT_FOUND;
  ------------------
  |  |  119|      0|# define ASN1_IDENTIFIER_NOT_FOUND	3
  ------------------
 1039|      0|	    }
 1040|    266|	}
 1041|    876|      else if ((type_field (p->type) == ASN1_ETYPE_OBJECT_ID) &&
  ------------------
  |  |  226|    876|# define ASN1_ETYPE_OBJECT_ID     12
  ------------------
  |  Branch (1041:16): [True: 68, False: 808]
  ------------------
 1042|    876|	       (p->type & CONST_DEFAULT))
  ------------------
  |  |  145|     68|# define CONST_DEFAULT     (1U<<15)
  ------------------
  |  Branch (1042:9): [True: 0, False: 68]
  ------------------
 1043|      0|	{
 1044|      0|	  p2 = p->down;
 1045|      0|	  if (p2 && (type_field (p2->type) == ASN1_ETYPE_DEFAULT))
  ------------------
  |  |  223|      0|# define ASN1_ETYPE_DEFAULT        9
  ------------------
  |  Branch (1045:8): [True: 0, False: 0]
  |  Branch (1045:14): [True: 0, False: 0]
  ------------------
 1046|      0|	    {
 1047|      0|	      _asn1_str_cpy (name2, sizeof (name2), node->name);
 1048|      0|	      if (p2->value)
  ------------------
  |  Branch (1048:12): [True: 0, False: 0]
  ------------------
 1049|      0|		{
 1050|      0|		  _asn1_str_cat (name2, sizeof (name2), ".");
 1051|      0|		  _asn1_str_cat (name2, sizeof (name2), (char *) p2->value);
 1052|      0|		  _asn1_str_cpy (_asn1_identifierMissing,
 1053|      0|				 sizeof (_asn1_identifierMissing),
 1054|      0|				 (char *) p2->value);
 1055|      0|		}
 1056|      0|	      else
 1057|      0|		_asn1_strcpy (_asn1_identifierMissing, "(null)");
  ------------------
  |  |  117|      0|# define _asn1_strcpy(a,b) strcpy((char *)a, (const char *)b)
  ------------------
 1058|       |
 1059|      0|	      p2 = asn1_find_node (node, name2);
 1060|      0|	      if (!p2 || (type_field (p2->type) != ASN1_ETYPE_OBJECT_ID) ||
  ------------------
  |  |  226|      0|# define ASN1_ETYPE_OBJECT_ID     12
  ------------------
  |  Branch (1060:12): [True: 0, False: 0]
  |  Branch (1060:19): [True: 0, False: 0]
  ------------------
 1061|      0|		  !(p2->type & CONST_ASSIGN))
  ------------------
  |  |  166|      0|# define CONST_ASSIGN      (1U<<28)
  ------------------
  |  Branch (1061:5): [True: 0, False: 0]
  ------------------
 1062|      0|		return ASN1_IDENTIFIER_NOT_FOUND;
  ------------------
  |  |  119|      0|# define ASN1_IDENTIFIER_NOT_FOUND	3
  ------------------
 1063|      0|	      else
 1064|      0|		_asn1_identifierMissing[0] = 0;
 1065|      0|	    }
 1066|      0|	}
 1067|    876|      else if ((type_field (p->type) == ASN1_ETYPE_OBJECT_ID) &&
  ------------------
  |  |  226|    876|# define ASN1_ETYPE_OBJECT_ID     12
  ------------------
  |  Branch (1067:16): [True: 68, False: 808]
  ------------------
 1068|    876|	       (p->type & CONST_ASSIGN))
  ------------------
  |  |  166|     68|# define CONST_ASSIGN      (1U<<28)
  ------------------
  |  Branch (1068:9): [True: 2, False: 66]
  ------------------
 1069|      2|	{
 1070|      2|	  p2 = p->down;
 1071|      2|	  if (p2 && (type_field (p2->type) == ASN1_ETYPE_CONSTANT))
  ------------------
  |  |  215|      2|# define ASN1_ETYPE_CONSTANT       1
  ------------------
  |  Branch (1071:8): [True: 2, False: 0]
  |  Branch (1071:14): [True: 2, False: 0]
  ------------------
 1072|      2|	    {
 1073|      2|	      if (p2->value && !c_isdigit (p2->value[0]))
  ------------------
  |  Branch (1073:12): [True: 2, False: 0]
  |  Branch (1073:25): [True: 0, False: 2]
  ------------------
 1074|      0|		{
 1075|      0|		  _asn1_str_cpy (name2, sizeof (name2), node->name);
 1076|      0|		  _asn1_str_cat (name2, sizeof (name2), ".");
 1077|      0|		  _asn1_str_cat (name2, sizeof (name2), (char *) p2->value);
 1078|      0|		  _asn1_str_cpy (_asn1_identifierMissing,
 1079|      0|				 sizeof (_asn1_identifierMissing),
 1080|      0|				 (char *) p2->value);
 1081|       |
 1082|      0|		  p2 = asn1_find_node (node, name2);
 1083|      0|		  if (!p2 || (type_field (p2->type) != ASN1_ETYPE_OBJECT_ID)
  ------------------
  |  |  226|      0|# define ASN1_ETYPE_OBJECT_ID     12
  ------------------
  |  Branch (1083:9): [True: 0, False: 0]
  |  Branch (1083:16): [True: 0, False: 0]
  ------------------
 1084|      0|		      || !(p2->type & CONST_ASSIGN))
  ------------------
  |  |  166|      0|# define CONST_ASSIGN      (1U<<28)
  ------------------
  |  Branch (1084:12): [True: 0, False: 0]
  ------------------
 1085|      0|		    return ASN1_IDENTIFIER_NOT_FOUND;
  ------------------
  |  |  119|      0|# define ASN1_IDENTIFIER_NOT_FOUND	3
  ------------------
 1086|      0|		  else
 1087|      0|		    _asn1_identifierMissing[0] = 0;
 1088|      0|		}
 1089|      2|	    }
 1090|      2|	}
 1091|       |
 1092|  1.14k|      if (p->down)
  ------------------
  |  Branch (1092:11): [True: 424, False: 718]
  ------------------
 1093|    424|	{
 1094|    424|	  p = p->down;
 1095|    424|	}
 1096|    718|      else if (p->right)
  ------------------
  |  Branch (1096:16): [True: 392, False: 326]
  ------------------
 1097|    392|	p = p->right;
 1098|    326|      else
 1099|    326|	{
 1100|    424|	  while (p)
  ------------------
  |  Branch (1100:11): [True: 424, False: 0]
  ------------------
 1101|    424|	    {
 1102|    424|	      p = _asn1_find_up (p);
 1103|    424|	      if (p == node)
  ------------------
  |  Branch (1103:12): [True: 4, False: 420]
  ------------------
 1104|      4|		{
 1105|      4|		  p = NULL;
 1106|      4|		  break;
 1107|      4|		}
 1108|    420|	      if (p && p->right)
  ------------------
  |  Branch (1108:12): [True: 420, False: 0]
  |  Branch (1108:17): [True: 322, False: 98]
  ------------------
 1109|    322|		{
 1110|    322|		  p = p->right;
 1111|    322|		  break;
 1112|    322|		}
 1113|    420|	    }
 1114|    326|	}
 1115|  1.14k|    }
 1116|       |
 1117|      4|  return ASN1_SUCCESS;
  ------------------
  |  |  116|      4|# define ASN1_SUCCESS			0
  ------------------
 1118|      4|}
parser_aux.c:_asn1_hash_name:
   44|  1.43k|{
   45|  1.43k|  const unsigned char *s = (unsigned char *) x;
   46|  1.43k|  unsigned h = 0;
   47|       |
   48|  17.9k|  while (*s)
  ------------------
  |  Branch (48:10): [True: 16.5k, False: 1.43k]
  ------------------
   49|  16.5k|    h = (*s++) + ((h << 9) | (h >> (WORD_BIT - 9)));
   50|       |
   51|  1.43k|  return h;
   52|  1.43k|}

structure.c:_asn1_set_down:
  112|    424|{
  113|    424|  if (node == NULL)
  ------------------
  |  Branch (113:7): [True: 0, False: 424]
  ------------------
  114|      0|    return node;
  115|    424|  node->down = down;
  116|    424|  if (down)
  ------------------
  |  Branch (116:7): [True: 424, False: 0]
  ------------------
  117|    424|    down->left = node;
  118|    424|  return node;
  119|    424|}

asn1_array2tree:
  179|      4|{
  180|      4|  asn1_node p, p_last = NULL;
  181|      4|  unsigned long k;
  182|      4|  int move;
  183|      4|  int result;
  184|      4|  unsigned int type;
  185|      4|  list_type *e_list = NULL;
  186|       |
  187|      4|  if (errorDescription)
  ------------------
  |  Branch (187:7): [True: 0, False: 4]
  ------------------
  188|      0|    errorDescription[0] = 0;
  189|       |
  190|      4|  if (*definitions != NULL)
  ------------------
  |  Branch (190:7): [True: 0, False: 4]
  ------------------
  191|      0|    return ASN1_ELEMENT_NOT_EMPTY;
  ------------------
  |  |  133|      0|# define ASN1_ELEMENT_NOT_EMPTY		17
  ------------------
  192|       |
  193|      4|  move = UP;
  ------------------
  |  |  129|      4|# define UP     1
  ------------------
  194|       |
  195|  1.14k|  for (k = 0; array[k].value || array[k].type || array[k].name; k++)
  ------------------
  |  Branch (195:15): [True: 462, False: 684]
  |  Branch (195:33): [True: 680, False: 4]
  |  Branch (195:50): [True: 0, False: 4]
  ------------------
  196|  1.14k|    {
  197|  1.14k|      type = convert_old_type (array[k].type);
  198|       |
  199|  1.14k|      p = _asn1_add_static_node (&e_list, type & (~CONST_DOWN));
  ------------------
  |  |  168|  1.14k|# define CONST_DOWN        (1U<<29)
  ------------------
  200|  1.14k|      if (array[k].name)
  ------------------
  |  Branch (200:11): [True: 898, False: 244]
  ------------------
  201|    898|	_asn1_set_name (p, array[k].name);
  202|  1.14k|      if (array[k].value)
  ------------------
  |  Branch (202:11): [True: 462, False: 680]
  ------------------
  203|    462|	_asn1_set_value (p, array[k].value, strlen (array[k].value) + 1);
  204|       |
  205|  1.14k|      if (*definitions == NULL)
  ------------------
  |  Branch (205:11): [True: 4, False: 1.13k]
  ------------------
  206|      4|	*definitions = p;
  207|       |
  208|  1.14k|      if (move == DOWN)
  ------------------
  |  |  131|  1.14k|# define DOWN   3
  ------------------
  |  Branch (208:11): [True: 424, False: 718]
  ------------------
  209|    424|	{
  210|    424|	  if (p_last && p_last->down)
  ------------------
  |  Branch (210:8): [True: 424, False: 0]
  |  Branch (210:18): [True: 0, False: 424]
  ------------------
  211|      0|	    _asn1_delete_structure (e_list, &p_last->down, 0);
  212|    424|	  _asn1_set_down (p_last, p);
  213|    424|	}
  214|    718|      else if (move == RIGHT)
  ------------------
  |  |  130|    718|# define RIGHT  2
  ------------------
  |  Branch (214:16): [True: 714, False: 4]
  ------------------
  215|    714|	{
  216|    714|	  if (p_last && p_last->right)
  ------------------
  |  Branch (216:8): [True: 714, False: 0]
  |  Branch (216:18): [True: 0, False: 714]
  ------------------
  217|      0|	    _asn1_delete_structure (e_list, &p_last->right, 0);
  218|    714|	  _asn1_set_right (p_last, p);
  219|    714|	}
  220|       |
  221|  1.14k|      p_last = p;
  222|       |
  223|  1.14k|      if (type & CONST_DOWN)
  ------------------
  |  |  168|  1.14k|# define CONST_DOWN        (1U<<29)
  ------------------
  |  Branch (223:11): [True: 424, False: 718]
  ------------------
  224|    424|	move = DOWN;
  ------------------
  |  |  131|    424|# define DOWN   3
  ------------------
  225|    718|      else if (type & CONST_RIGHT)
  ------------------
  |  |  169|    718|# define CONST_RIGHT       (1U<<30)
  ------------------
  |  Branch (225:16): [True: 392, False: 326]
  ------------------
  226|    392|	move = RIGHT;
  ------------------
  |  |  130|    392|# define RIGHT  2
  ------------------
  227|    326|      else
  228|    326|	{
  229|    428|	  while (p_last != *definitions)
  ------------------
  |  Branch (229:11): [True: 424, False: 4]
  ------------------
  230|    424|	    {
  231|    424|	      p_last = _asn1_find_up (p_last);
  232|       |
  233|    424|	      if (p_last == NULL)
  ------------------
  |  Branch (233:12): [True: 0, False: 424]
  ------------------
  234|      0|		break;
  235|       |
  236|    424|	      if (p_last->type & CONST_RIGHT)
  ------------------
  |  |  169|    424|# define CONST_RIGHT       (1U<<30)
  ------------------
  |  Branch (236:12): [True: 322, False: 102]
  ------------------
  237|    322|		{
  238|    322|		  p_last->type &= ~CONST_RIGHT;
  ------------------
  |  |  169|    322|# define CONST_RIGHT       (1U<<30)
  ------------------
  239|    322|		  move = RIGHT;
  ------------------
  |  |  130|    322|# define RIGHT  2
  ------------------
  240|    322|		  break;
  241|    322|		}
  242|    424|	    }			/* while */
  243|    326|	}
  244|  1.14k|    }				/* while */
  245|       |
  246|      4|  if (p_last == *definitions)
  ------------------
  |  Branch (246:7): [True: 4, False: 0]
  ------------------
  247|      4|    {
  248|      4|      result = _asn1_check_identifier (*definitions);
  249|      4|      if (result == ASN1_SUCCESS)
  ------------------
  |  |  116|      4|# define ASN1_SUCCESS			0
  ------------------
  |  Branch (249:11): [True: 4, False: 0]
  ------------------
  250|      4|	{
  251|      4|	  _asn1_change_integer_value (*definitions);
  252|      4|	  result = _asn1_expand_object_id (&e_list, *definitions);
  253|      4|	}
  254|      4|    }
  255|      0|  else
  256|      0|    {
  257|      0|      result = ASN1_ARRAY_ERROR;
  ------------------
  |  |  132|      0|# define ASN1_ARRAY_ERROR		16
  ------------------
  258|      0|    }
  259|       |
  260|      4|  if (errorDescription != NULL)
  ------------------
  |  Branch (260:7): [True: 0, False: 4]
  ------------------
  261|      0|    {
  262|      0|      if (result == ASN1_IDENTIFIER_NOT_FOUND)
  ------------------
  |  |  119|      0|# define ASN1_IDENTIFIER_NOT_FOUND	3
  ------------------
  |  Branch (262:11): [True: 0, False: 0]
  ------------------
  263|      0|	{
  264|      0|	  Estrcpy (errorDescription, ":: identifier '");
  ------------------
  |  |   29|      0|# define Estrcpy(x,y) _asn1_str_cpy(x,ASN1_MAX_ERROR_DESCRIPTION_SIZE,y)
  |  |  ------------------
  |  |  |  |  315|      0|# define ASN1_MAX_ERROR_DESCRIPTION_SIZE 128
  |  |  ------------------
  ------------------
  265|      0|	  Estrcat (errorDescription, _asn1_identifierMissing);
  ------------------
  |  |   30|      0|# define Estrcat(x,y) _asn1_str_cat(x,ASN1_MAX_ERROR_DESCRIPTION_SIZE,y)
  |  |  ------------------
  |  |  |  |  315|      0|# define ASN1_MAX_ERROR_DESCRIPTION_SIZE 128
  |  |  ------------------
  ------------------
  266|      0|	  Estrcat (errorDescription, "' not found");
  ------------------
  |  |   30|      0|# define Estrcat(x,y) _asn1_str_cat(x,ASN1_MAX_ERROR_DESCRIPTION_SIZE,y)
  |  |  ------------------
  |  |  |  |  315|      0|# define ASN1_MAX_ERROR_DESCRIPTION_SIZE 128
  |  |  ------------------
  ------------------
  267|      0|	}
  268|      0|      else
  269|      0|	errorDescription[0] = 0;
  270|      0|    }
  271|       |
  272|      4|  if (result != ASN1_SUCCESS)
  ------------------
  |  |  116|      4|# define ASN1_SUCCESS			0
  ------------------
  |  Branch (272:7): [True: 0, False: 4]
  ------------------
  273|      0|    {
  274|      0|      _asn1_delete_list_and_nodes (e_list);
  275|      0|      *definitions = NULL;
  276|      0|    }
  277|      4|  else
  278|      4|    _asn1_delete_list (e_list);
  279|       |
  280|      4|  return result;
  281|      4|}

asn1_check_version:
   46|      2|{
   47|      2|  if (!req_version || strverscmp (req_version, ASN1_VERSION) <= 0)
  ------------------
  |  |   71|      2|# define ASN1_VERSION "4.19.0"
  ------------------
  |  Branch (47:7): [True: 0, False: 2]
  |  Branch (47:23): [True: 2, False: 0]
  ------------------
   48|      2|    return ASN1_VERSION;
  ------------------
  |  |   71|      2|# define ASN1_VERSION "4.19.0"
  ------------------
   49|       |
   50|      0|  return NULL;
   51|      2|}

gnutls_crypto_init:
   41|      2|{
   42|      2|	void *(*defallocfunc)(size_t);
   43|      2|	void *(*defreallocfunc)(void *, size_t, size_t);
   44|      2|	void (*deffreefunc)(void *, size_t);
   45|       |
   46|       |	/* Check if non-default allocators are being used.
   47|       |	 * Some applications like guile override GMP allocators
   48|       |	 * with GC capable alternatives. Do nothing if this is
   49|       |	 * the case.
   50|       |	 */
   51|      2|	mp_get_memory_functions(&allocfunc, &reallocfunc, &freefunc);
   52|      2|	mp_set_memory_functions(NULL, NULL, NULL);
   53|      2|	mp_get_memory_functions(&defallocfunc, &defreallocfunc, &deffreefunc);
   54|      2|	if (reallocfunc != defreallocfunc || freefunc != deffreefunc) {
  ------------------
  |  Branch (54:6): [True: 0, False: 2]
  |  Branch (54:39): [True: 0, False: 2]
  ------------------
   55|      0|		mp_set_memory_functions(allocfunc, reallocfunc, freefunc);
   56|      0|		return (0);
   57|      0|	}
   58|       |
   59|       |	/* Overload GMP allocators with safe alternatives */
   60|      2|	mp_set_memory_functions(NULL, gnutls_realloc_zero, gnutls_free_zero);
   61|      2|	return 0;
   62|      2|}

_rnd_system_entropy_init:
  162|      2|{
  163|      2|	int urandom_fd;
  164|       |
  165|      2|#if defined(__linux__)
  166|       |	/* Enable getrandom() usage if available */
  167|      2|	if (have_getrandom()) {
  ------------------
  |  Branch (167:6): [True: 2, False: 0]
  ------------------
  168|      2|		_rnd_get_system_entropy = _rnd_get_system_entropy_getrandom;
  169|      2|		_gnutls_debug_log("getrandom random generator was selected\n");
  ------------------
  |  |  149|      2|#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|      2|	do {                                          \
  |  |  |  |  145|      2|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      2|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      2|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  147|      2|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  170|      2|		return 0;
  171|      2|	} else {
  172|      0|		_gnutls_debug_log("getrandom is not available\n");
  ------------------
  |  |  149|      0|#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  173|      0|	}
  174|      0|#endif
  175|       |
  176|       |	/* Fallback: /dev/urandom */
  177|       |
  178|       |	/* Check that we can open it */
  179|      0|	urandom_fd = open("/dev/urandom", O_RDONLY);
  180|      0|	if (urandom_fd < 0) {
  ------------------
  |  Branch (180:6): [True: 0, False: 0]
  ------------------
  181|      0|		_gnutls_debug_log(
  ------------------
  |  |  149|      0|#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  182|      0|			"Cannot open /dev/urandom during initialization!\n");
  183|      0|		return gnutls_assert_val(GNUTLS_E_RANDOM_DEVICE_ERROR);
  ------------------
  |  |  196|      0|	gnutls_assert_val_int(x, __FILE__, __func__, __LINE__)
  ------------------
  184|      0|	}
  185|      0|	close(urandom_fd);
  186|       |
  187|      0|	_rnd_get_system_entropy = _rnd_get_system_entropy_urandom;
  188|      0|	_gnutls_debug_log("/dev/urandom random generator was selected\n");
  ------------------
  |  |  149|      0|#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|       |
  190|      0|	return 0;
  191|      0|}
sysrng-linux.c:have_getrandom:
   72|      2|{
   73|      2|	char c;
   74|      2|	int ret;
   75|      2|	ret = getrandom(&c, 1, 1 /*GRND_NONBLOCK */);
   76|      2|	if (ret == 1 || (ret == -1 && errno == EAGAIN))
  ------------------
  |  Branch (76:6): [True: 2, False: 0]
  |  Branch (76:19): [True: 0, False: 0]
  |  Branch (76:32): [True: 0, False: 0]
  ------------------
   77|      2|		return 1;
   78|      0|	return 0;
   79|      2|}

_gnutls_prepare_to_load_system_priorities:
 2324|      2|{
 2325|      2|	const char *p;
 2326|      2|	int ret;
 2327|       |
 2328|      2|	p = secure_getenv("GNUTLS_SYSTEM_PRIORITY_FILE");
 2329|      2|	if (p != NULL)
  ------------------
  |  Branch (2329:6): [True: 0, False: 2]
  ------------------
 2330|      0|		system_priority_file = p;
 2331|       |
 2332|      2|	p = secure_getenv("GNUTLS_SYSTEM_PRIORITY_FAIL_ON_INVALID");
 2333|      2|	if (p != NULL && p[0] == '1' && p[1] == 0)
  ------------------
  |  Branch (2333:6): [True: 0, False: 2]
  |  Branch (2333:19): [True: 0, False: 0]
  |  Branch (2333:34): [True: 0, False: 0]
  ------------------
 2334|      0|		fail_on_invalid_config = 1;
 2335|       |
 2336|      2|	ret = _gnutls_update_system_priorities(true /* defer_system_wide */);
 2337|      2|	if (ret < 0) {
  ------------------
  |  Branch (2337:6): [True: 0, False: 2]
  ------------------
 2338|      0|		_gnutls_debug_log("failed to update system priorities: %s\n",
  ------------------
  |  |  149|      0|#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2339|      0|				  gnutls_strerror(ret));
 2340|      0|	}
 2341|      2|}
priority.c:_gnutls_update_system_priorities:
 2202|      2|{
 2203|      2|	int ret, err = 0;
 2204|      2|	struct stat sb;
 2205|      2|	FILE *fp;
 2206|      2|	gnutls_buffer_st buf;
 2207|      2|	struct ini_ctx ctx;
 2208|       |
 2209|      2|	ret = gnutls_rwlock_rdlock(&system_wide_config_rwlock);
  ------------------
  |  |   62|      2|	(unlikely(glthread_rwlock_rdlock(RWLOCK)) ?          \
  |  |  ------------------
  |  |  |  |   75|      6|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (75:21): [True: 0, False: 2]
  |  |  |  |  |  Branch (75:39): [True: 2, False: 0]
  |  |  |  |  |  Branch (75:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   63|      2|		 gnutls_assert_val(GNUTLS_E_LOCKING_ERROR) : \
  |  |  ------------------
  |  |  |  |  196|      0|	gnutls_assert_val_int(x, __FILE__, __func__, __LINE__)
  |  |  ------------------
  |  |   64|      2|		 0)
  ------------------
 2210|      2|	if (ret < 0) {
  ------------------
  |  Branch (2210:6): [True: 0, False: 2]
  ------------------
 2211|      0|		return gnutls_assert_val(ret);
  ------------------
  |  |  196|      0|	gnutls_assert_val_int(x, __FILE__, __func__, __LINE__)
  ------------------
 2212|      0|	}
 2213|       |
 2214|      2|	if (stat(system_priority_file, &sb) < 0) {
  ------------------
  |  Branch (2214:6): [True: 2, False: 0]
  ------------------
 2215|      2|		_gnutls_debug_log("cfg: unable to access: %s: %d\n",
  ------------------
  |  |  149|      2|#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|      2|	do {                                          \
  |  |  |  |  145|      2|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      2|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      2|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  147|      2|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2216|      2|				  system_priority_file, errno);
 2217|      2|		goto out;
 2218|      2|	}
 2219|       |
 2220|      0|	if (system_priority_file_loaded &&
  ------------------
  |  Branch (2220:6): [True: 0, False: 0]
  ------------------
 2221|      0|	    system_priority_last_mod == sb.st_mtime) {
  ------------------
  |  Branch (2221:6): [True: 0, False: 0]
  ------------------
 2222|      0|		_gnutls_debug_log("cfg: system priority %s has not changed\n",
  ------------------
  |  |  149|      0|#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2223|      0|				  system_priority_file);
 2224|      0|		if (system_wide_config.priority_string) {
  ------------------
  |  Branch (2224:7): [True: 0, False: 0]
  ------------------
 2225|      0|			goto out; /* nothing to do */
 2226|      0|		}
 2227|      0|	}
 2228|       |
 2229|      0|	(void)gnutls_rwlock_unlock(&system_wide_config_rwlock);
  ------------------
  |  |   72|      0|	(unlikely(glthread_rwlock_unlock(RWLOCK)) ?          \
  |  |  ------------------
  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  Branch (75:39): [True: 0, False: 0]
  |  |  |  |  |  Branch (75:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   73|      0|		 gnutls_assert_val(GNUTLS_E_LOCKING_ERROR) : \
  |  |  ------------------
  |  |  |  |  196|      0|	gnutls_assert_val_int(x, __FILE__, __func__, __LINE__)
  |  |  ------------------
  |  |   74|      0|		 0)
  ------------------
 2230|       |
 2231|      0|	ret = gnutls_rwlock_wrlock(&system_wide_config_rwlock);
  ------------------
  |  |   67|      0|	(unlikely(glthread_rwlock_wrlock(RWLOCK)) ?          \
  |  |  ------------------
  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  Branch (75:39): [True: 0, False: 0]
  |  |  |  |  |  Branch (75:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   68|      0|		 gnutls_assert_val(GNUTLS_E_LOCKING_ERROR) : \
  |  |  ------------------
  |  |  |  |  196|      0|	gnutls_assert_val_int(x, __FILE__, __func__, __LINE__)
  |  |  ------------------
  |  |   69|      0|		 0)
  ------------------
 2232|      0|	if (ret < 0) {
  ------------------
  |  Branch (2232:6): [True: 0, False: 0]
  ------------------
 2233|      0|		return gnutls_assert_val(ret);
  ------------------
  |  |  196|      0|	gnutls_assert_val_int(x, __FILE__, __func__, __LINE__)
  ------------------
 2234|      0|	}
 2235|       |
 2236|       |	/* Another thread could have successfully re-read system-wide config,
 2237|       |	 * skip re-reading if the mtime it has used is exactly the same.
 2238|       |	 */
 2239|      0|	if (system_priority_file_loaded) {
  ------------------
  |  Branch (2239:6): [True: 0, False: 0]
  ------------------
 2240|      0|		system_priority_file_loaded =
 2241|      0|			(system_priority_last_mod == sb.st_mtime);
 2242|      0|	}
 2243|       |
 2244|      0|	if (!system_priority_file_loaded) {
  ------------------
  |  Branch (2244:6): [True: 0, False: 0]
  ------------------
 2245|      0|		_name_val_array_clear(&system_wide_config.priority_strings);
 2246|       |
 2247|      0|		gnutls_free(system_wide_config.priority_string);
  ------------------
  |  | 2265|      0|#define gnutls_free(a) gnutls_free((void *)(a)), a = NULL
  ------------------
 2248|      0|		system_wide_config.priority_string = NULL;
 2249|       |
 2250|      0|		fp = fopen(system_priority_file, "re");
 2251|      0|		if (fp == NULL) {
  ------------------
  |  Branch (2251:7): [True: 0, False: 0]
  ------------------
 2252|      0|			_gnutls_debug_log("cfg: unable to open: %s: %d\n",
  ------------------
  |  |  149|      0|#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2253|      0|					  system_priority_file, errno);
 2254|      0|			goto out;
 2255|      0|		}
 2256|       |		/* Parsing the configuration file needs to be done in 2 phases:
 2257|       |		 * first parsing the [global] section
 2258|       |		 * and then the other sections,
 2259|       |		 * because the [global] section modifies the parsing behavior.
 2260|       |		 */
 2261|      0|		memset(&ctx, 0, sizeof(ctx));
 2262|      0|		err = ini_parse_file(fp, global_ini_handler, &ctx);
 2263|      0|		if (!err) {
  ------------------
  |  Branch (2263:7): [True: 0, False: 0]
  ------------------
 2264|      0|			if (fseek(fp, 0L, SEEK_SET) < 0) {
  ------------------
  |  Branch (2264:8): [True: 0, False: 0]
  ------------------
 2265|      0|				_gnutls_debug_log("cfg: unable to rewind: %s\n",
  ------------------
  |  |  149|      0|#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2266|      0|						  system_priority_file);
 2267|      0|				if (fail_on_invalid_config)
  ------------------
  |  Branch (2267:9): [True: 0, False: 0]
  ------------------
 2268|      0|					exit(1);
 2269|      0|			}
 2270|      0|			err = ini_parse_file(fp, cfg_ini_handler, &ctx);
 2271|      0|		}
 2272|      0|		fclose(fp);
 2273|      0|		if (err) {
  ------------------
  |  Branch (2273:7): [True: 0, False: 0]
  ------------------
 2274|      0|			ini_ctx_deinit(&ctx);
 2275|      0|			_gnutls_debug_log("cfg: unable to parse: %s: %d\n",
  ------------------
  |  |  149|      0|#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2276|      0|					  system_priority_file, err);
 2277|      0|			goto out;
 2278|      0|		}
 2279|      0|		cfg_apply(&system_wide_config, &ctx);
 2280|      0|		ini_ctx_deinit(&ctx);
 2281|      0|		_gnutls_debug_log("cfg: loaded system config %s mtime %lld\n",
  ------------------
  |  |  149|      0|#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2282|      0|				  system_priority_file,
 2283|      0|				  (unsigned long long)sb.st_mtime);
 2284|      0|	}
 2285|       |
 2286|      0|	if (system_wide_config.allowlisting) {
  ------------------
  |  Branch (2286:6): [True: 0, False: 0]
  ------------------
 2287|      0|		if (defer_system_wide) {
  ------------------
  |  Branch (2287:7): [True: 0, False: 0]
  ------------------
 2288|       |			/* try constructing a priority string,
 2289|       |			 * but don't apply it yet, at this point
 2290|       |			 * we're only interested in whether we can */
 2291|      0|			ret = construct_system_wide_priority_string(&buf);
 2292|      0|			_gnutls_buffer_clear(&buf);
 2293|      0|			_gnutls_debug_log("cfg: deferred setting "
  ------------------
  |  |  149|      0|#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2294|      0|					  "system-wide priority string\n");
 2295|      0|		} else {
 2296|      0|			ret = update_system_wide_priority_string();
 2297|      0|			_gnutls_debug_log("cfg: finalized "
  ------------------
  |  |  149|      0|#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2298|      0|					  "system-wide priority string\n");
 2299|      0|		}
 2300|      0|		if (ret < 0) {
  ------------------
  |  Branch (2300:7): [True: 0, False: 0]
  ------------------
 2301|      0|			_gnutls_debug_log(
  ------------------
  |  |  149|      0|#define _gnutls_debug_log(...) LEVEL(2, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  144|      0|	do {                                          \
  |  |  |  |  145|      0|		if (unlikely(_gnutls_log_level >= l)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   75|      0|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (75:21): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      0|			_gnutls_log(l, __VA_ARGS__);  \
  |  |  |  |  147|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (147:11): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2302|      0|				"cfg: unable to build priority string: %s\n",
 2303|      0|				gnutls_strerror(ret));
 2304|      0|			if (fail_on_invalid_config)
  ------------------
  |  Branch (2304:8): [True: 0, False: 0]
  ------------------
 2305|      0|				exit(1);
 2306|      0|			goto out;
 2307|      0|		}
 2308|      0|	}
 2309|       |
 2310|      0|	system_priority_file_loaded = 1;
 2311|      0|	system_priority_last_mod = sb.st_mtime;
 2312|       |
 2313|      2|out:
 2314|      2|	(void)gnutls_rwlock_unlock(&system_wide_config_rwlock);
  ------------------
  |  |   72|      2|	(unlikely(glthread_rwlock_unlock(RWLOCK)) ?          \
  |  |  ------------------
  |  |  |  |   75|      6|#define unlikely(x) __builtin_expect((x), 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (75:21): [True: 0, False: 2]
  |  |  |  |  |  Branch (75:39): [True: 2, False: 0]
  |  |  |  |  |  Branch (75:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   73|      2|		 gnutls_assert_val(GNUTLS_E_LOCKING_ERROR) : \
  |  |  ------------------
  |  |  |  |  196|      0|	gnutls_assert_val_int(x, __FILE__, __func__, __LINE__)
  |  |  ------------------
  |  |   74|      2|		 0)
  ------------------
 2315|       |
 2316|      2|	if (err && fail_on_invalid_config) {
  ------------------
  |  Branch (2316:6): [True: 0, False: 2]
  |  Branch (2316:13): [True: 0, False: 0]
  ------------------
 2317|      0|		exit(1);
 2318|      0|	}
 2319|       |
 2320|      2|	return ret;
 2321|      2|}

_gnutls_rnd_preinit:
  106|      2|{
  107|      2|	int ret;
  108|       |
  109|       |#if defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION)
  110|       |#warning Insecure PRNG is enabled
  111|       |	ret = gnutls_crypto_rnd_register(100, &_gnutls_fuzz_rnd_ops);
  112|       |	if (ret < 0)
  113|       |		return ret;
  114|       |
  115|       |#elif defined(ENABLE_FIPS140)
  116|       |	/* The FIPS140 random generator is only enabled when we are compiled
  117|       |	 * with FIPS support, _and_ the system is in FIPS installed state.
  118|       |	 */
  119|       |	if (_gnutls_fips_mode_enabled()) {
  120|       |		ret = gnutls_crypto_rnd_register(100, &_gnutls_fips_rnd_ops);
  121|       |		if (ret < 0)
  122|       |			return ret;
  123|       |	}
  124|       |#endif
  125|       |
  126|      2|	ret = _rnd_system_entropy_init();
  127|      2|	if (ret < 0)
  ------------------
  |  Branch (127:6): [True: 0, False: 2]
  ------------------
  128|      0|		return gnutls_assert_val(GNUTLS_E_RANDOM_FAILED);
  ------------------
  |  |  196|      0|	gnutls_assert_val_int(x, __FILE__, __func__, __LINE__)
  ------------------
  129|       |
  130|      2|	ret = glthread_tls_key_init(&ctx_key, delete_ctx);
  ------------------
  |  |  135|      2|    (pthread_in_use ()                              \
  |  |  ------------------
  |  |  |  |  115|      2|      (pthread_mutexattr_gettype != NULL || c11_threads_in_use ())
  |  |  |  |  ------------------
  |  |  |  |  |  |   89|      0|#  define c11_threads_in_use() (thrd_exit != NULL)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (89:32): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (115:8): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  136|      2|     ? pthread_key_create (&(KEY)->key, DESTRUCTOR) \
  |  |  137|      2|     : ((KEY)->singlethread_value = NULL, 0))
  ------------------
  131|      2|	if (ret)
  ------------------
  |  Branch (131:6): [True: 0, False: 2]
  ------------------
  132|      0|		return gnutls_assert_val(GNUTLS_E_RANDOM_FAILED);
  ------------------
  |  |  196|      0|	gnutls_assert_val_int(x, __FILE__, __func__, __LINE__)
  ------------------
  133|       |
  134|      2|	list = gl_list_nx_create_empty(GL_LINKEDHASH_LIST, NULL, NULL, free_ctx,
  ------------------
  |  |   28|      2|#define GL_LINKEDHASH_LIST &gl_linkedhash_list_implementation
  ------------------
  135|      2|				       false);
  136|      2|	if (list == NULL)
  ------------------
  |  Branch (136:6): [True: 0, False: 2]
  ------------------
  137|      0|		return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR);
  ------------------
  |  |  196|      0|	gnutls_assert_val_int(x, __FILE__, __func__, __LINE__)
  ------------------
  138|       |
  139|      2|	return 0;
  140|      2|}

gnutls_system_global_init:
   69|      2|{
   70|       |#if defined(_WIN32) && defined(NEED_CERT_ENUM_CRLS)
   71|       |	/* used in system/certs.c */
   72|       |	HMODULE crypto;
   73|       |	crypto = LoadLibrary(TEXT("Crypt32.dll"));
   74|       |
   75|       |	if (crypto == NULL)
   76|       |		return GNUTLS_E_CRYPTO_INIT_FAILED;
   77|       |
   78|       |	pCertEnumCRLsInStore = (CertEnumCRLsInStoreFunc)GetProcAddress(
   79|       |		crypto, "CertEnumCRLsInStore");
   80|       |	if (pCertEnumCRLsInStore == NULL) {
   81|       |		FreeLibrary(crypto);
   82|       |		return GNUTLS_E_CRYPTO_INIT_FAILED;
   83|       |	}
   84|       |
   85|       |	Crypt32_dll = crypto;
   86|       |#endif
   87|      2|	gnutls_time = time;
   88|      2|	gnutls_gettime = _gnutls_gettime;
   89|      2|	return 0;
   90|      2|}

_gnutls_system_key_init:
   67|      2|{
   68|      2|	return 0;
   69|      2|}

gl_uninorm_decompose_merge_sort_inplace:
  193|  35.8k|{
  194|  35.8k|  switch (n)
  195|  35.8k|    {
  196|      0|    case 0:
  ------------------
  |  Branch (196:5): [True: 0, False: 35.8k]
  ------------------
  197|      0|    case 1:
  ------------------
  |  Branch (197:5): [True: 0, False: 35.8k]
  ------------------
  198|       |      /* Nothing to do.  */
  199|      0|      return;
  200|  22.2k|    case 2:
  ------------------
  |  Branch (200:5): [True: 22.2k, False: 13.6k]
  ------------------
  201|       |      /* Trivial case.  */
  202|  22.2k|      if (COMPARE (&src[0], &src[1]) <= 0)
  ------------------
  |  |   24|  22.2k|#define COMPARE(a,b) ((a)->ccc - (b)->ccc)
  ------------------
  |  Branch (202:11): [True: 21.5k, False: 689]
  ------------------
  203|  21.5k|        {
  204|       |          /* src[0] <= src[1] */
  205|  21.5k|        }
  206|    689|      else
  207|    689|        {
  208|    689|          ELEMENT t = src[0];
  ------------------
  |  |   23|    689|#define ELEMENT struct ucs4_with_ccc
  ------------------
  209|    689|          src[0] = src[1];
  210|    689|          src[1] = t;
  211|    689|        }
  212|  22.2k|      break;
  213|  4.87k|    case 3:
  ------------------
  |  Branch (213:5): [True: 4.87k, False: 31.0k]
  ------------------
  214|       |      /* Simple case.  */
  215|  4.87k|      if (COMPARE (&src[0], &src[1]) <= 0)
  ------------------
  |  |   24|  4.87k|#define COMPARE(a,b) ((a)->ccc - (b)->ccc)
  ------------------
  |  Branch (215:11): [True: 3.57k, False: 1.29k]
  ------------------
  216|  3.57k|        {
  217|  3.57k|          if (COMPARE (&src[1], &src[2]) <= 0)
  ------------------
  |  |   24|  3.57k|#define COMPARE(a,b) ((a)->ccc - (b)->ccc)
  ------------------
  |  Branch (217:15): [True: 2.98k, False: 588]
  ------------------
  218|  2.98k|            {
  219|       |              /* src[0] <= src[1] <= src[2] */
  220|  2.98k|            }
  221|    588|          else if (COMPARE (&src[0], &src[2]) <= 0)
  ------------------
  |  |   24|    588|#define COMPARE(a,b) ((a)->ccc - (b)->ccc)
  ------------------
  |  Branch (221:20): [True: 283, False: 305]
  ------------------
  222|    283|            {
  223|       |              /* src[0] <= src[2] < src[1] */
  224|    283|              ELEMENT t = src[1];
  ------------------
  |  |   23|    283|#define ELEMENT struct ucs4_with_ccc
  ------------------
  225|    283|              src[1] = src[2];
  226|    283|              src[2] = t;
  227|    283|            }
  228|    305|          else
  229|    305|            {
  230|       |              /* src[2] < src[0] <= src[1] */
  231|    305|              ELEMENT t = src[0];
  ------------------
  |  |   23|    305|#define ELEMENT struct ucs4_with_ccc
  ------------------
  232|    305|              src[0] = src[2];
  233|    305|              src[2] = src[1];
  234|    305|              src[1] = t;
  235|    305|            }
  236|  3.57k|        }
  237|  1.29k|      else
  238|  1.29k|        {
  239|  1.29k|          if (COMPARE (&src[0], &src[2]) <= 0)
  ------------------
  |  |   24|  1.29k|#define COMPARE(a,b) ((a)->ccc - (b)->ccc)
  ------------------
  |  Branch (239:15): [True: 424, False: 870]
  ------------------
  240|    424|            {
  241|       |              /* src[1] < src[0] <= src[2] */
  242|    424|              ELEMENT t = src[0];
  ------------------
  |  |   23|    424|#define ELEMENT struct ucs4_with_ccc
  ------------------
  243|    424|              src[0] = src[1];
  244|    424|              src[1] = t;
  245|    424|            }
  246|    870|          else if (COMPARE (&src[1], &src[2]) <= 0)
  ------------------
  |  |   24|    870|#define COMPARE(a,b) ((a)->ccc - (b)->ccc)
  ------------------
  |  Branch (246:20): [True: 604, False: 266]
  ------------------
  247|    604|            {
  248|       |              /* src[1] <= src[2] < src[0] */
  249|    604|              ELEMENT t = src[0];
  ------------------
  |  |   23|    604|#define ELEMENT struct ucs4_with_ccc
  ------------------
  250|    604|              src[0] = src[1];
  251|    604|              src[1] = src[2];
  252|    604|              src[2] = t;
  253|    604|            }
  254|    266|          else
  255|    266|            {
  256|       |              /* src[2] < src[1] < src[0] */
  257|    266|              ELEMENT t = src[0];
  ------------------
  |  |   23|    266|#define ELEMENT struct ucs4_with_ccc
  ------------------
  258|    266|              src[0] = src[2];
  259|    266|              src[2] = t;
  260|    266|            }
  261|  1.29k|        }
  262|  4.87k|      break;
  263|  8.79k|    default:
  ------------------
  |  Branch (263:5): [True: 8.79k, False: 27.0k]
  ------------------
  264|  8.79k|      {
  265|  8.79k|        size_t n1 = n / 2;
  266|  8.79k|        size_t n2 = (n + 1) / 2;
  267|       |        /* Note: n1 + n2 = n, n1 <= n2.  */
  268|       |        /* Sort src[n1..n-1], scratching tmp[0..n2-1].  */
  269|  8.79k|        merge_sort_inplace (src + n1, n2, tmp);
  ------------------
  |  |   28|  8.79k|#define merge_sort_inplace gl_uninorm_decompose_merge_sort_inplace
  ------------------
  270|       |        /* Sort src[0..n1-1] into tmp[0..n1-1], scratching tmp[n1..2*n1-1].  */
  271|  8.79k|        merge_sort_fromto (src, tmp, n1, tmp + n1);
  ------------------
  |  |   27|  8.79k|#define merge_sort_fromto gl_uninorm_decompose_merge_sort_fromto
  ------------------
  272|       |        /* Merge the two half results.  */
  273|  8.79k|        merge (tmp, n1, src + n1, n2, src);
  274|  8.79k|      }
  275|  8.79k|      break;
  276|  35.8k|    }
  277|  35.8k|}
decompose-internal.c:gl_uninorm_decompose_merge_sort_fromto:
   99|  59.8k|{
  100|  59.8k|  switch (n)
  101|  59.8k|    {
  102|      0|    case 0:
  ------------------
  |  Branch (102:5): [True: 0, False: 59.8k]
  ------------------
  103|      0|      return;
  104|      0|    case 1:
  ------------------
  |  Branch (104:5): [True: 0, False: 59.8k]
  ------------------
  105|       |      /* Nothing to do.  */
  106|      0|      dst[0] = src[0];
  107|      0|      return;
  108|  30.5k|    case 2:
  ------------------
  |  Branch (108:5): [True: 30.5k, False: 29.3k]
  ------------------
  109|       |      /* Trivial case.  */
  110|  30.5k|      if (COMPARE (&src[0], &src[1]) <= 0)
  ------------------
  |  |   24|  30.5k|#define COMPARE(a,b) ((a)->ccc - (b)->ccc)
  ------------------
  |  Branch (110:11): [True: 29.2k, False: 1.28k]
  ------------------
  111|  29.2k|        {
  112|       |          /* src[0] <= src[1] */
  113|  29.2k|          dst[0] = src[0];
  114|  29.2k|          dst[1] = src[1];
  115|  29.2k|        }
  116|  1.28k|      else
  117|  1.28k|        {
  118|  1.28k|          dst[0] = src[1];
  119|  1.28k|          dst[1] = src[0];
  120|  1.28k|        }
  121|  30.5k|      break;
  122|  3.80k|    case 3:
  ------------------
  |  Branch (122:5): [True: 3.80k, False: 56.0k]
  ------------------
  123|       |      /* Simple case.  */
  124|  3.80k|      if (COMPARE (&src[0], &src[1]) <= 0)
  ------------------
  |  |   24|  3.80k|#define COMPARE(a,b) ((a)->ccc - (b)->ccc)
  ------------------
  |  Branch (124:11): [True: 2.69k, False: 1.11k]
  ------------------
  125|  2.69k|        {
  126|  2.69k|          if (COMPARE (&src[1], &src[2]) <= 0)
  ------------------
  |  |   24|  2.69k|#define COMPARE(a,b) ((a)->ccc - (b)->ccc)
  ------------------
  |  Branch (126:15): [True: 1.63k, False: 1.05k]
  ------------------
  127|  1.63k|            {
  128|       |              /* src[0] <= src[1] <= src[2] */
  129|  1.63k|              dst[0] = src[0];
  130|  1.63k|              dst[1] = src[1];
  131|  1.63k|              dst[2] = src[2];
  132|  1.63k|            }
  133|  1.05k|          else if (COMPARE (&src[0], &src[2]) <= 0)
  ------------------
  |  |   24|  1.05k|#define COMPARE(a,b) ((a)->ccc - (b)->ccc)
  ------------------
  |  Branch (133:20): [True: 612, False: 440]
  ------------------
  134|    612|            {
  135|       |              /* src[0] <= src[2] < src[1] */
  136|    612|              dst[0] = src[0];
  137|    612|              dst[1] = src[2];
  138|    612|              dst[2] = src[1];
  139|    612|            }
  140|    440|          else
  141|    440|            {
  142|       |              /* src[2] < src[0] <= src[1] */
  143|    440|              dst[0] = src[2];
  144|    440|              dst[1] = src[0];
  145|    440|              dst[2] = src[1];
  146|    440|            }
  147|  2.69k|        }
  148|  1.11k|      else
  149|  1.11k|        {
  150|  1.11k|          if (COMPARE (&src[0], &src[2]) <= 0)
  ------------------
  |  |   24|  1.11k|#define COMPARE(a,b) ((a)->ccc - (b)->ccc)
  ------------------
  |  Branch (150:15): [True: 530, False: 586]
  ------------------
  151|    530|            {
  152|       |              /* src[1] < src[0] <= src[2] */
  153|    530|              dst[0] = src[1];
  154|    530|              dst[1] = src[0];
  155|    530|              dst[2] = src[2];
  156|    530|            }
  157|    586|          else if (COMPARE (&src[1], &src[2]) <= 0)
  ------------------
  |  |   24|    586|#define COMPARE(a,b) ((a)->ccc - (b)->ccc)
  ------------------
  |  Branch (157:20): [True: 339, False: 247]
  ------------------
  158|    339|            {
  159|       |              /* src[1] <= src[2] < src[0] */
  160|    339|              dst[0] = src[1];
  161|    339|              dst[1] = src[2];
  162|    339|              dst[2] = src[0];
  163|    339|            }
  164|    247|          else
  165|    247|            {
  166|       |              /* src[2] < src[1] < src[0] */
  167|    247|              dst[0] = src[2];
  168|    247|              dst[1] = src[1];
  169|    247|              dst[2] = src[0];
  170|    247|            }
  171|  1.11k|        }
  172|  3.80k|      break;
  173|  25.5k|    default:
  ------------------
  |  Branch (173:5): [True: 25.5k, False: 34.3k]
  ------------------
  174|  25.5k|      {
  175|  25.5k|        size_t n1 = n / 2;
  176|  25.5k|        size_t n2 = (n + 1) / 2;
  177|       |        /* Note: n1 + n2 = n, n1 <= n2.  */
  178|       |        /* Sort src[n1..n-1] into dst[n1..n-1], scratching tmp[0..n2/2-1].  */
  179|  25.5k|        merge_sort_fromto (src + n1, dst + n1, n2, tmp);
  ------------------
  |  |   27|  25.5k|#define merge_sort_fromto gl_uninorm_decompose_merge_sort_fromto
  ------------------
  180|       |        /* Sort src[0..n1-1] into tmp[0..n1-1], scratching dst[0..n1-1].  */
  181|  25.5k|        merge_sort_fromto (src, tmp, n1, dst);
  ------------------
  |  |   27|  25.5k|#define merge_sort_fromto gl_uninorm_decompose_merge_sort_fromto
  ------------------
  182|       |        /* Merge the two half results.  */
  183|  25.5k|        merge (tmp, n1, dst + n1, n2, dst);
  184|  25.5k|      }
  185|  25.5k|      break;
  186|  59.8k|    }
  187|  59.8k|}
decompose-internal.c:merge:
   48|  34.3k|{
   49|  34.3k|  for (;;) /* while (n1 > 0 && n2 > 0) */
   50|   194k|    {
   51|   194k|      if (COMPARE (src1, src2) <= 0)
  ------------------
  |  |   24|   194k|#define COMPARE(a,b) ((a)->ccc - (b)->ccc)
  ------------------
  |  Branch (51:11): [True: 177k, False: 17.7k]
  ------------------
   52|   177k|        {
   53|   177k|          *dst++ = *src1++;
   54|   177k|          n1--;
   55|   177k|          if (n1 == 0)
  ------------------
  |  Branch (55:15): [True: 33.2k, False: 143k]
  ------------------
   56|  33.2k|            break;
   57|   177k|        }
   58|  17.7k|      else
   59|  17.7k|        {
   60|  17.7k|          *dst++ = *src2++;
   61|  17.7k|          n2--;
   62|  17.7k|          if (n2 == 0)
  ------------------
  |  Branch (62:15): [True: 1.08k, False: 16.6k]
  ------------------
   63|  1.08k|            break;
   64|  17.7k|        }
   65|   194k|    }
   66|       |  /* Here n1 == 0 || n2 == 0 but also n1 > 0 || n2 > 0.  */
   67|  34.3k|  if (n1 > 0)
  ------------------
  |  Branch (67:7): [True: 1.08k, False: 33.2k]
  ------------------
   68|  1.08k|    {
   69|  1.08k|      if (dst != src1)
  ------------------
  |  Branch (69:11): [True: 1.08k, False: 0]
  ------------------
   70|  1.08k|        do
   71|  1.93k|          {
   72|  1.93k|            *dst++ = *src1++;
   73|  1.93k|            n1--;
   74|  1.93k|          }
   75|  1.93k|        while (n1 > 0);
  ------------------
  |  Branch (75:16): [True: 851, False: 1.08k]
  ------------------
   76|  1.08k|    }
   77|  33.2k|  else /* n2 > 0 */
   78|  33.2k|    {
   79|  33.2k|      if (dst != src2)
  ------------------
  |  Branch (79:11): [True: 0, False: 33.2k]
  ------------------
   80|      0|        do
   81|      0|          {
   82|      0|            *dst++ = *src2++;
   83|      0|            n2--;
   84|      0|          }
   85|      0|        while (n2 > 0);
  ------------------
  |  Branch (85:16): [True: 0, False: 0]
  ------------------
   86|  33.2k|    }
   87|  34.3k|}

categ_test.c:bitmap_lookup:
   29|  41.8k|{
   30|  41.8k|  unsigned int index1 = uc >> header_0;
  ------------------
  |  |   22|  41.8k|#define header_0 16
  ------------------
   31|  41.8k|  if (index1 < ((const int *) table)[0])
  ------------------
  |  Branch (31:7): [True: 41.5k, False: 303]
  ------------------
   32|  41.5k|    {
   33|  41.5k|      int lookup1 = ((const int *) table)[1 + index1];
   34|  41.5k|      if (lookup1 >= 0)
  ------------------
  |  Branch (34:11): [True: 40.4k, False: 1.15k]
  ------------------
   35|  40.4k|        {
   36|  40.4k|          unsigned int index2 = (uc >> header_2) & header_3;
  ------------------
  |  |   23|  40.4k|#define header_2 9
  ------------------
                        unsigned int index2 = (uc >> header_2) & header_3;
  ------------------
  |  |   24|  40.4k|#define header_3 127
  ------------------
   37|  40.4k|          int lookup2 = ((const short *) table)[lookup1 + index2];
   38|  40.4k|          if (lookup2 >= 0)
  ------------------
  |  Branch (38:15): [True: 15.0k, False: 25.3k]
  ------------------
   39|  15.0k|            {
   40|  15.0k|              unsigned int index3 = (uc >> 5) & header_4;
  ------------------
  |  |   25|  15.0k|#define header_4 15
  ------------------
   41|  15.0k|              unsigned int lookup3 = ((const unsigned int *) table)[lookup2 + index3];
   42|       |
   43|  15.0k|              return (lookup3 >> (uc & 0x1f)) & 1;
   44|  15.0k|            }
   45|  40.4k|        }
   46|  41.5k|    }
   47|  26.8k|  return 0;
   48|  41.8k|}

uc_is_general_category_withtable:
   57|  2.31k|{
   58|  2.31k|  int bit = lookup_withtable (uc);
   59|       |
   60|  2.31k|  if (bit >= 0)
  ------------------
  |  Branch (60:7): [True: 2.31k, False: 0]
  ------------------
   61|  2.31k|    return ((bitmask >> bit) & 1);
   62|      0|  else
   63|      0|    return false;
   64|  2.31k|}
categ_of.c:lookup_withtable:
   28|  2.31k|{
   29|  2.31k|  unsigned int index1 = uc >> category_header_0;
  ------------------
  |  |   20|  2.31k|#define category_header_0 16
  ------------------
   30|  2.31k|  if (index1 < category_header_1)
  ------------------
  |  |   21|  2.31k|#define category_header_1 17
  ------------------
  |  Branch (30:7): [True: 2.31k, False: 0]
  ------------------
   31|  2.31k|    {
   32|  2.31k|      int lookup1 = u_category.level1[index1];
   33|  2.31k|      if (lookup1 >= 0)
  ------------------
  |  Branch (33:11): [True: 2.31k, False: 0]
  ------------------
   34|  2.31k|        {
   35|  2.31k|          unsigned int index2 = (uc >> category_header_2) & category_header_3;
  ------------------
  |  |   22|  2.31k|#define category_header_2 7
  ------------------
                        unsigned int index2 = (uc >> category_header_2) & category_header_3;
  ------------------
  |  |   23|  2.31k|#define category_header_3 511
  ------------------
   36|  2.31k|          int lookup2 = u_category.level2[lookup1 + index2];
   37|  2.31k|          if (lookup2 >= 0)
  ------------------
  |  Branch (37:15): [True: 2.31k, False: 0]
  ------------------
   38|  2.31k|            {
   39|  2.31k|              unsigned int index3 = ((uc & category_header_4) + lookup2) * 5;
  ------------------
  |  |   24|  2.31k|#define category_header_4 127
  ------------------
   40|       |              /* level3 contains 5-bit values, packed into 16-bit words.  */
   41|  2.31k|              unsigned int lookup3 =
   42|  2.31k|                (((unsigned int) u_category.level3[index3>>4]
   43|  2.31k|                  | ((unsigned int) u_category.level3[(index3>>4)+1] << 16))
   44|  2.31k|                 >> (index3 % 16))
   45|  2.31k|                & 0x1f;
   46|       |
   47|  2.31k|              return lookup3;
   48|  2.31k|            }
   49|  2.31k|        }
   50|      0|      return 29; /* = log2(UC_CATEGORY_MASK_Cn) */
   51|  2.31k|    }
   52|      0|  return -1;
   53|  2.31k|}

uc_is_general_category:
   27|  41.8k|{
   28|  41.8k|  if (category.generic)
  ------------------
  |  Branch (28:7): [True: 0, False: 41.8k]
  ------------------
   29|      0|    return category.lookup.lookup_fn (uc, category.bitmask);
   30|  41.8k|  else
   31|  41.8k|    return bitmap_lookup (category.lookup.table, uc);
   32|  41.8k|}

uc_combining_class:
   28|   797k|{
   29|   797k|  unsigned int index1 = uc >> combclass_header_0;
  ------------------
  |  |   20|   797k|#define combclass_header_0 16
  ------------------
   30|   797k|  if (index1 < combclass_header_1)
  ------------------
  |  |   21|   797k|#define combclass_header_1 2
  ------------------
  |  Branch (30:7): [True: 792k, False: 4.86k]
  ------------------
   31|   792k|    {
   32|   792k|      int lookup1 = u_combclass.level1[index1];
   33|   792k|      if (lookup1 >= 0)
  ------------------
  |  Branch (33:11): [True: 792k, False: 0]
  ------------------
   34|   792k|        {
   35|   792k|          unsigned int index2 = (uc >> combclass_header_2) & combclass_header_3;
  ------------------
  |  |   22|   792k|#define combclass_header_2 7
  ------------------
                        unsigned int index2 = (uc >> combclass_header_2) & combclass_header_3;
  ------------------
  |  |   23|   792k|#define combclass_header_3 511
  ------------------
   36|   792k|          int lookup2 = u_combclass.level2[lookup1 + index2];
   37|   792k|          if (lookup2 >= 0)
  ------------------
  |  Branch (37:15): [True: 263k, False: 529k]
  ------------------
   38|   263k|            {
   39|   263k|              unsigned int index3 = (uc & combclass_header_4);
  ------------------
  |  |   24|   263k|#define combclass_header_4 127
  ------------------
   40|   263k|              unsigned int lookup3 = u_combclass.level3[lookup2 + index3];
   41|       |
   42|   263k|              return lookup3;
   43|   263k|            }
   44|   792k|        }
   45|   792k|    }
   46|   533k|  return 0;
   47|   797k|}

uc_canonical_decomposition:
   29|   824k|{
   30|   824k|  if (uc >= 0xAC00 && uc < 0xD7A4)
  ------------------
  |  Branch (30:7): [True: 14.0k, False: 810k]
  |  Branch (30:23): [True: 1.85k, False: 12.2k]
  ------------------
   31|  1.85k|    {
   32|       |      /* Hangul syllable.  See Unicode standard, chapter 3, section
   33|       |         "Hangul Syllable Decomposition",  See also the clarification at
   34|       |         <https://www.unicode.org/versions/Unicode5.1.0/>, section
   35|       |         "Clarification of Hangul Jamo Handling".  */
   36|  1.85k|      unsigned int t;
   37|       |
   38|  1.85k|      uc -= 0xAC00;
   39|  1.85k|      t = uc % 28;
   40|       |
   41|  1.85k|      if (t == 0)
  ------------------
  |  Branch (41:11): [True: 982, False: 877]
  ------------------
   42|    982|        {
   43|    982|          unsigned int v, l;
   44|       |
   45|    982|          uc = uc / 28;
   46|    982|          v = uc % 21;
   47|    982|          l = uc / 21;
   48|       |
   49|    982|          decomposition[0] = 0x1100 + l;
   50|    982|          decomposition[1] = 0x1161 + v;
   51|    982|          return 2;
   52|    982|        }
   53|    877|      else
   54|    877|        {
   55|    877|#if 1 /* Return the pairwise decomposition, not the full decomposition.  */
   56|    877|          decomposition[0] = 0xAC00 + uc - t; /* = 0xAC00 + (l * 21 + v) * 28; */
   57|    877|          decomposition[1] = 0x11A7 + t;
   58|    877|          return 2;
   59|       |#else
   60|       |          unsigned int v, l;
   61|       |
   62|       |          uc = uc / 28;
   63|       |          v = uc % 21;
   64|       |          l = uc / 21;
   65|       |
   66|       |          decomposition[0] = 0x1100 + l;
   67|       |          decomposition[1] = 0x1161 + v;
   68|       |          decomposition[2] = 0x11A7 + t;
   69|       |          return 3;
   70|       |#endif
   71|    877|        }
   72|  1.85k|    }
   73|   822k|  else if (uc < 0x110000)
  ------------------
  |  Branch (73:12): [True: 822k, False: 0]
  ------------------
   74|   822k|    {
   75|   822k|      unsigned short entry = decomp_index (uc);
   76|       |      /* An entry of (unsigned short)(-1) denotes an absent entry.
   77|       |         Otherwise, bit 15 of the entry tells whether the decomposition
   78|       |         is a canonical one.  */
   79|   822k|      if (entry < 0x8000)
  ------------------
  |  Branch (79:11): [True: 27.0k, False: 795k]
  ------------------
   80|  27.0k|        {
   81|  27.0k|          const unsigned char *p;
   82|  27.0k|          unsigned int element;
   83|  27.0k|          unsigned int length;
   84|       |
   85|  27.0k|          p = &gl_uninorm_decomp_chars_table[3 * entry];
   86|  27.0k|          element = (p[0] << 16) | (p[1] << 8) | p[2];
   87|       |          /* The first element has 5 bits for the decomposition type.  */
   88|  27.0k|          if (((element >> 18) & 0x1f) != UC_DECOMP_CANONICAL)
  ------------------
  |  Branch (88:15): [True: 0, False: 27.0k]
  ------------------
   89|      0|            abort ();
   90|  27.0k|          length = 1;
   91|  27.0k|          for (;;)
   92|  53.8k|            {
   93|       |              /* Every element has an 18 bits wide Unicode code point.  */
   94|  53.8k|              *decomposition = element & 0x3ffff;
   95|       |              /* Bit 23 tells whether there are more elements,  */
   96|  53.8k|              if ((element & (1 << 23)) == 0)
  ------------------
  |  Branch (96:19): [True: 27.0k, False: 26.7k]
  ------------------
   97|  27.0k|                break;
   98|  26.7k|              p += 3;
   99|  26.7k|              element = (p[0] << 16) | (p[1] << 8) | p[2];
  100|  26.7k|              decomposition++;
  101|  26.7k|              length++;
  102|  26.7k|            }
  103|  27.0k|          return length;
  104|  27.0k|        }
  105|   822k|    }
  106|   795k|  return -1;
  107|   824k|}

composition.c:gl_uninorm_compose_lookup:
   58|   635k|{
   59|   635k|  static const unsigned char lengthtable[] =
   60|   635k|    {
   61|   635k|       0,  6,  6,  0,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   62|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   63|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   64|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   65|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   66|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   67|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   68|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   69|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   70|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   71|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   72|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   73|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   74|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   75|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   76|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   77|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   78|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   79|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   80|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   81|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   82|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   83|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   84|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   85|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   86|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   87|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   88|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   89|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   90|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   91|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   92|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   93|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   94|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   95|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   96|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   97|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   98|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
   99|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
  100|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
  101|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
  102|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
  103|   635k|       6,  6,  6,  6,  6,  0,  6,  6,  6,  6,  6,  6,  6,  6,
  104|   635k|       0,  6,  6,  6,  6,  6,  6,  6,  6,  0,  6,  6,  6,  6,
  105|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  0,  6,
  106|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  0,
  107|   635k|       6,  6,  6,  0,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
  108|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
  109|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
  110|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  0,  6,  6,  6,  0,  6,
  111|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
  112|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
  113|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
  114|   635k|       6,  6,  6,  6,  6,  6,  0,  6,  6,  6,  6,  6,  6,  6,
  115|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  0,  6,  6,  6,
  116|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
  117|   635k|       6,  6,  6,  6,  6,  6,  0,  6,  6,  0,  6,  6,  6,  6,
  118|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  0,  6,
  119|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
  120|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  0,  6,  6,
  121|   635k|       0,  6,  0,  6,  0,  6,  6,  6,  6,  0,  6,  6,  6,  6,
  122|   635k|       6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
  123|   635k|       6,  6,  6,  6,  6,  6,  6,  0,  6,  0,  6,  6,  0,  6,
  124|   635k|       6,  6,  0,  6,  0,  6,  6,  6,  6,  0,  6,  6,  0,  6,
  125|   635k|       6,  6,  0,  6,  0,  6,  0,  6,  0,  6,  0,  6,  6,  0,
  126|   635k|       6,  0,  6,  6,  6,  6,  6,  0,  6,  0,  6,  0,  0,  6,
  127|   635k|       6,  6,  6,  0,  6,  0,  0,  6,  6,  0,  6,  6,  6,  0,
  128|   635k|       0,  0,  0,  0,  6,  0,  6,  6,  0,  6,  6,  0,  0,  0,
  129|   635k|       0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  6,  0,  6,  0,
  130|   635k|       0,  0,  0,  0,  6,  6,  0,  0,  0,  0,  6,  6,  6,  0,
  131|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  6,  6,
  132|   635k|       0,  0,  0,  0,  0,  0,  6,  6,  0,  6,  6,  6,  0,  6,
  133|   635k|       0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  6,
  134|   635k|       6,  0,  0,  0,  6,  0,  0,  6,  6,  0,  0,  0,  0,  0,
  135|   635k|       0,  0,  0,  0,  0,  6,  0,  0,  0,  6,  6,  0,  0,  0,
  136|   635k|       0,  0,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,  0,  0,
  137|   635k|       0,  6,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  138|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  139|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  140|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  141|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  142|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  143|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,  0,
  144|   635k|       0,  0,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,  0,  6,
  145|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  146|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  147|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  6,
  148|   635k|       0,  0,  0,  6,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,
  149|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  150|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  6,  0,
  151|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  152|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  153|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,
  154|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  155|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  156|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  157|   635k|       0,  0,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  158|   635k|       0,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,  6,  0,  0,
  159|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  160|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  161|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  162|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  163|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  164|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  165|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  166|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  6,  0,  0,  0,
  167|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  168|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  169|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  170|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  171|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  172|   635k|       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  6
  173|   635k|    };
  174|   635k|  static const struct composition_rule wordlist[] =
  175|   635k|    {
  176|   635k|      {""},
  177|   635k|#line 572 "./uninorm/composition-table.gperf"
  178|   635k|      {"\000\001\002\000\003\001", 0x1eae},
  179|   635k|#line 574 "./uninorm/composition-table.gperf"
  180|   635k|      {"\000\001\002\000\003\000", 0x1eb0},
  181|   635k|      {""},
  182|   635k|#line 573 "./uninorm/composition-table.gperf"
  183|   635k|      {"\000\001\003\000\003\001", 0x1eaf},
  184|   635k|#line 575 "./uninorm/composition-table.gperf"
  185|   635k|      {"\000\001\003\000\003\000", 0x1eb1},
  186|   635k|#line 557 "./uninorm/composition-table.gperf"
  187|   635k|      {"\000\001\177\000\003\007", 0x1e9b},
  188|   635k|#line 238 "./uninorm/composition-table.gperf"
  189|   635k|      {"\000\000\370\000\003\001", 0x01ff},
  190|   635k|#line 412 "./uninorm/composition-table.gperf"
  191|   635k|      {"\000\000\347\000\003\001", 0x1e09},
  192|   635k|#line 90 "./uninorm/composition-table.gperf"
  193|   635k|      {"\000\000C\000\003\001", 0x0106},
  194|   635k|#line 450 "./uninorm/composition-table.gperf"
  195|   635k|      {"\000\000\357\000\003\001", 0x1e2f},
  196|   635k|#line 234 "./uninorm/composition-table.gperf"
  197|   635k|      {"\000\000\345\000\003\001", 0x01fb},
  198|   635k|#line 92 "./uninorm/composition-table.gperf"
  199|   635k|      {"\000\000C\000\003\002", 0x0108},
  200|   635k|#line 94 "./uninorm/composition-table.gperf"
  201|   635k|      {"\000\000C\000\003\007", 0x010a},
  202|   635k|#line 653 "./uninorm/composition-table.gperf"
  203|   635k|      {"\000\037\001\000\003\001", 0x1f05},
  204|   635k|#line 651 "./uninorm/composition-table.gperf"
  205|   635k|      {"\000\037\001\000\003\000", 0x1f03},
  206|   635k|#line 655 "./uninorm/composition-table.gperf"
  207|   635k|      {"\000\037\001\000\003B", 0x1f07},
  208|   635k|#line 660 "./uninorm/composition-table.gperf"
  209|   635k|      {"\000\037\010\000\003\001", 0x1f0c},
  210|   635k|#line 658 "./uninorm/composition-table.gperf"
  211|   635k|      {"\000\037\010\000\003\000", 0x1f0a},
  212|   635k|#line 662 "./uninorm/composition-table.gperf"
  213|   635k|      {"\000\037\010\000\003B", 0x1f0e},
  214|   635k|#line 652 "./uninorm/composition-table.gperf"
  215|   635k|      {"\000\037\000\000\003\001", 0x1f04},
  216|   635k|#line 650 "./uninorm/composition-table.gperf"
  217|   635k|      {"\000\037\000\000\003\000", 0x1f02},
  218|   635k|#line 654 "./uninorm/composition-table.gperf"
  219|   635k|      {"\000\037\000\000\003B", 0x1f06},
  220|   635k|#line 433 "./uninorm/composition-table.gperf"
  221|   635k|      {"\000\000F\000\003\007", 0x1e1e},
  222|   635k|#line 851 "./uninorm/composition-table.gperf"
  223|   635k|      {"\000\003\316\000\003E", 0x1ff4},
  224|   635k|#line 757 "./uninorm/composition-table.gperf"
  225|   635k|      {"\000\037\002\000\003E", 0x1f82},
  226|   635k|#line 756 "./uninorm/composition-table.gperf"
  227|   635k|      {"\000\037\001\000\003E", 0x1f81},
  228|   635k|#line 480 "./uninorm/composition-table.gperf"
  229|   635k|      {"\000\000\365\000\003\001", 0x1e4d},
  230|   635k|#line 758 "./uninorm/composition-table.gperf"
  231|   635k|      {"\000\037\003\000\003E", 0x1f83},
  232|   635k|#line 763 "./uninorm/composition-table.gperf"
  233|   635k|      {"\000\037\010\000\003E", 0x1f88},
  234|   635k|#line 236 "./uninorm/composition-table.gperf"
  235|   635k|      {"\000\000\346\000\003\001", 0x01fd},
  236|   635k|#line 506 "./uninorm/composition-table.gperf"
  237|   635k|      {"\000\001a\000\003\007", 0x1e67},
  238|   635k|#line 755 "./uninorm/composition-table.gperf"
  239|   635k|      {"\000\037\000\000\003E", 0x1f80},
  240|   635k|#line 58 "./uninorm/composition-table.gperf"
  241|   635k|      {"\000\000a\000\003\001", 0x00e1},
  242|   635k|#line 57 "./uninorm/composition-table.gperf"
  243|   635k|      {"\000\000a\000\003\000", 0x00e0},
  244|   635k|#line 809 "./uninorm/composition-table.gperf"
  245|   635k|      {"\000\037\266\000\003E", 0x1fb7},
  246|   635k|#line 59 "./uninorm/composition-table.gperf"
  247|   635k|      {"\000\000a\000\003\002", 0x00e2},
  248|   635k|#line 270 "./uninorm/composition-table.gperf"
  249|   635k|      {"\000\000a\000\003\007", 0x0227},
  250|   635k|#line 778 "./uninorm/composition-table.gperf"
  251|   635k|      {"\000\037'\000\003E", 0x1f97},
  252|   635k|#line 737 "./uninorm/composition-table.gperf"
  253|   635k|      {"\000\037a\000\003\001", 0x1f65},
  254|   635k|#line 735 "./uninorm/composition-table.gperf"
  255|   635k|      {"\000\037a\000\003\000", 0x1f63},
  256|   635k|#line 739 "./uninorm/composition-table.gperf"
  257|   635k|      {"\000\037a\000\003B", 0x1f67},
  258|   635k|#line 853 "./uninorm/composition-table.gperf"
  259|   635k|      {"\000\037\366\000\003E", 0x1ff7},
  260|   635k|#line 524 "./uninorm/composition-table.gperf"
  261|   635k|      {"\000\001i\000\003\001", 0x1e79},
  262|   635k|#line 206 "./uninorm/composition-table.gperf"
  263|   635k|      {"\000\000\334\000\003\001", 0x01d7},
  264|   635k|#line 210 "./uninorm/composition-table.gperf"
  265|   635k|      {"\000\000\334\000\003\000", 0x01db},
  266|   635k|#line 661 "./uninorm/composition-table.gperf"
  267|   635k|      {"\000\037\011\000\003\001", 0x1f0d},
  268|   635k|#line 659 "./uninorm/composition-table.gperf"
  269|   635k|      {"\000\037\011\000\003\000", 0x1f0b},
  270|   635k|#line 663 "./uninorm/composition-table.gperf"
  271|   635k|      {"\000\037\011\000\003B", 0x1f0f},
  272|   635k|#line 69 "./uninorm/composition-table.gperf"
  273|   635k|      {"\000\000i\000\003\001", 0x00ed},
  274|   635k|#line 68 "./uninorm/composition-table.gperf"
  275|   635k|      {"\000\000i\000\003\000", 0x00ec},
  276|   635k|#line 788 "./uninorm/composition-table.gperf"
  277|   635k|      {"\000\037a\000\003E", 0x1fa1},
  278|   635k|#line 70 "./uninorm/composition-table.gperf"
  279|   635k|      {"\000\000i\000\003\002", 0x00ee},
  280|   635k|#line 615 "./uninorm/composition-table.gperf"
  281|   635k|      {"\000\036\315\000\003\002", 0x1ed9},
  282|   635k|#line 129 "./uninorm/composition-table.gperf"
  283|   635k|      {"\000\000J\000\003\002", 0x0134},
  284|   635k|#line 745 "./uninorm/composition-table.gperf"
  285|   635k|      {"\000\037i\000\003\001", 0x1f6d},
  286|   635k|#line 743 "./uninorm/composition-table.gperf"
  287|   635k|      {"\000\037i\000\003\000", 0x1f6b},
  288|   635k|#line 747 "./uninorm/composition-table.gperf"
  289|   635k|      {"\000\037i\000\003B", 0x1f6f},
  290|   635k|#line 764 "./uninorm/composition-table.gperf"
  291|   635k|      {"\000\037\011\000\003E", 0x1f89},
  292|   635k|#line 578 "./uninorm/composition-table.gperf"
  293|   635k|      {"\000\001\002\000\003\003", 0x1eb4},
  294|   635k|#line 482 "./uninorm/composition-table.gperf"
  295|   635k|      {"\000\000\365\000\003\010", 0x1e4f},
  296|   635k|#line 614 "./uninorm/composition-table.gperf"
  297|   635k|      {"\000\036\314\000\003\002", 0x1ed8},
  298|   635k|#line 579 "./uninorm/composition-table.gperf"
  299|   635k|      {"\000\001\003\000\003\003", 0x1eb5},
  300|   635k|#line 705 "./uninorm/composition-table.gperf"
  301|   635k|      {"\000\0379\000\003\001", 0x1f3d},
  302|   635k|#line 703 "./uninorm/composition-table.gperf"
  303|   635k|      {"\000\0379\000\003\000", 0x1f3b},
  304|   635k|#line 707 "./uninorm/composition-table.gperf"
  305|   635k|      {"\000\0379\000\003B", 0x1f3f},
  306|   635k|#line 61 "./uninorm/composition-table.gperf"
  307|   635k|      {"\000\000a\000\003\010", 0x00e4},
  308|   635k|#line 796 "./uninorm/composition-table.gperf"
  309|   635k|      {"\000\037i\000\003E", 0x1fa9},
  310|   635k|#line 43 "./uninorm/composition-table.gperf"
  311|   635k|      {"\000\000I\000\003\001", 0x00cd},
  312|   635k|#line 42 "./uninorm/composition-table.gperf"
  313|   635k|      {"\000\000I\000\003\000", 0x00cc},
  314|   635k|#line 817 "./uninorm/composition-table.gperf"
  315|   635k|      {"\000\003\256\000\003E", 0x1fc4},
  316|   635k|#line 44 "./uninorm/composition-table.gperf"
  317|   635k|      {"\000\000I\000\003\002", 0x00ce},
  318|   635k|#line 128 "./uninorm/composition-table.gperf"
  319|   635k|      {"\000\000I\000\003\007", 0x0130},
  320|   635k|#line 875 "./uninorm/composition-table.gperf"
  321|   635k|      {"\000\000<\000\0038", 0x226e},
  322|   635k|#line 719 "./uninorm/composition-table.gperf"
  323|   635k|      {"\000\037I\000\003\001", 0x1f4d},
  324|   635k|#line 717 "./uninorm/composition-table.gperf"
  325|   635k|      {"\000\037I\000\003\000", 0x1f4b},
  326|   635k|#line 712 "./uninorm/composition-table.gperf"
  327|   635k|      {"\000\037@\000\003\001", 0x1f44},
  328|   635k|#line 710 "./uninorm/composition-table.gperf"
  329|   635k|      {"\000\037@\000\003\000", 0x1f42},
  330|   635k|#line 689 "./uninorm/composition-table.gperf"
  331|   635k|      {"\000\037)\000\003\001", 0x1f2d},
  332|   635k|#line 687 "./uninorm/composition-table.gperf"
  333|   635k|      {"\000\037)\000\003\000", 0x1f2b},
  334|   635k|#line 691 "./uninorm/composition-table.gperf"
  335|   635k|      {"\000\037)\000\003B", 0x1f2f},
  336|   635k|#line 849 "./uninorm/composition-table.gperf"
  337|   635k|      {"\000\037|\000\003E", 0x1ff2},
  338|   635k|#line 71 "./uninorm/composition-table.gperf"
  339|   635k|      {"\000\000i\000\003\010", 0x00ef},
  340|   635k|#line 759 "./uninorm/composition-table.gperf"
  341|   635k|      {"\000\037\004\000\003E", 0x1f84},
  342|   635k|#line 207 "./uninorm/composition-table.gperf"
  343|   635k|      {"\000\000\374\000\003\001", 0x01d8},
  344|   635k|#line 211 "./uninorm/composition-table.gperf"
  345|   635k|      {"\000\000\374\000\003\000", 0x01dc},
  346|   635k|#line 807 "./uninorm/composition-table.gperf"
  347|   635k|      {"\000\003\254\000\003E", 0x1fb4},
  348|   635k|#line 762 "./uninorm/composition-table.gperf"
  349|   635k|      {"\000\037\007\000\003E", 0x1f87},
  350|   635k|#line 675 "./uninorm/composition-table.gperf"
  351|   635k|      {"\000\037\031\000\003\001", 0x1f1d},
  352|   635k|#line 673 "./uninorm/composition-table.gperf"
  353|   635k|      {"\000\037\031\000\003\000", 0x1f1b},
  354|   635k|#line 780 "./uninorm/composition-table.gperf"
  355|   635k|      {"\000\037)\000\003E", 0x1f99},
  356|   635k|#line 60 "./uninorm/composition-table.gperf"
  357|   635k|      {"\000\000a\000\003\003", 0x00e3},
  358|   635k|#line 872 "./uninorm/composition-table.gperf"
  359|   635k|      {"\000\000=\000\0038", 0x2260},
  360|   635k|#line 351 "./uninorm/composition-table.gperf"
  361|   635k|      {"\000\004C\000\003\010", 0x04f1},
  362|   635k|#line 333 "./uninorm/composition-table.gperf"
  363|   635k|      {"\000\004\331\000\003\010", 0x04db},
  364|   635k|#line 87 "./uninorm/composition-table.gperf"
  365|   635k|      {"\000\000a\000\003\006", 0x0103},
  366|   635k|#line 32 "./uninorm/composition-table.gperf"
  367|   635k|      {"\000\000A\000\003\001", 0x00c1},
  368|   635k|#line 31 "./uninorm/composition-table.gperf"
  369|   635k|      {"\000\000A\000\003\000", 0x00c0},
  370|   635k|#line 89 "./uninorm/composition-table.gperf"
  371|   635k|      {"\000\000a\000\003(", 0x0105},
  372|   635k|#line 33 "./uninorm/composition-table.gperf"
  373|   635k|      {"\000\000A\000\003\002", 0x00c2},
  374|   635k|#line 269 "./uninorm/composition-table.gperf"
  375|   635k|      {"\000\000A\000\003\007", 0x0226},
  376|   635k|#line 45 "./uninorm/composition-table.gperf"
  377|   635k|      {"\000\000I\000\003\010", 0x00cf},
  378|   635k|#line 713 "./uninorm/composition-table.gperf"
  379|   635k|      {"\000\037A\000\003\001", 0x1f45},
  380|   635k|#line 711 "./uninorm/composition-table.gperf"
  381|   635k|      {"\000\037A\000\003\000", 0x1f43},
  382|   635k|#line 354 "./uninorm/composition-table.gperf"
  383|   635k|      {"\000\004'\000\003\010", 0x04f4},
  384|   635k|#line 65 "./uninorm/composition-table.gperf"
  385|   635k|      {"\000\000e\000\003\001", 0x00e9},
  386|   635k|#line 64 "./uninorm/composition-table.gperf"
  387|   635k|      {"\000\000e\000\003\000", 0x00e8},
  388|   635k|#line 121 "./uninorm/composition-table.gperf"
  389|   635k|      {"\000\000i\000\003\003", 0x0129},
  390|   635k|#line 66 "./uninorm/composition-table.gperf"
  391|   635k|      {"\000\000e\000\003\002", 0x00ea},
  392|   635k|#line 105 "./uninorm/composition-table.gperf"
  393|   635k|      {"\000\000e\000\003\007", 0x0117},
  394|   635k|#line 317 "./uninorm/composition-table.gperf"
  395|   635k|      {"\000\0043\000\003\001", 0x0453},
  396|   635k|#line 125 "./uninorm/composition-table.gperf"
  397|   635k|      {"\000\000i\000\003\006", 0x012d},
  398|   635k|#line 528 "./uninorm/composition-table.gperf"
  399|   635k|      {"\000\000v\000\003\003", 0x1e7d},
  400|   635k|#line 345 "./uninorm/composition-table.gperf"
  401|   635k|      {"\000\004\351\000\003\010", 0x04eb},
  402|   635k|#line 127 "./uninorm/composition-table.gperf"
  403|   635k|      {"\000\000i\000\003(", 0x012f},
  404|   635k|#line 344 "./uninorm/composition-table.gperf"
  405|   635k|      {"\000\004\350\000\003\010", 0x04ea},
  406|   635k|#line 668 "./uninorm/composition-table.gperf"
  407|   635k|      {"\000\037\020\000\003\001", 0x1f14},
  408|   635k|#line 666 "./uninorm/composition-table.gperf"
  409|   635k|      {"\000\037\020\000\003\000", 0x1f12},
  410|   635k|#line 576 "./uninorm/composition-table.gperf"
  411|   635k|      {"\000\001\002\000\003\011", 0x1eb2},
  412|   635k|#line 596 "./uninorm/composition-table.gperf"
  413|   635k|      {"\000\036\270\000\003\002", 0x1ec6},
  414|   635k|#line 368 "./uninorm/composition-table.gperf"
  415|   635k|      {"\000\0113\000\011<", 0x0934},
  416|   635k|#line 577 "./uninorm/composition-table.gperf"
  417|   635k|      {"\000\001\003\000\003\011", 0x1eb3},
  418|   635k|#line 321 "./uninorm/composition-table.gperf"
  419|   635k|      {"\000\004C\000\003\006", 0x045e},
  420|   635k|#line 792 "./uninorm/composition-table.gperf"
  421|   635k|      {"\000\037e\000\003E", 0x1fa5},
  422|   635k|#line 783 "./uninorm/composition-table.gperf"
  423|   635k|      {"\000\037,\000\003E", 0x1f9c},
  424|   635k|#line 337 "./uninorm/composition-table.gperf"
  425|   635k|      {"\000\0047\000\003\010", 0x04df},
  426|   635k|#line 120 "./uninorm/composition-table.gperf"
  427|   635k|      {"\000\000I\000\003\003", 0x0128},
  428|   635k|#line 432 "./uninorm/composition-table.gperf"
  429|   635k|      {"\000\002)\000\003\006", 0x1e1d},
  430|   635k|#line 781 "./uninorm/composition-table.gperf"
  431|   635k|      {"\000\037*\000\003E", 0x1f9a},
  432|   635k|#line 35 "./uninorm/composition-table.gperf"
  433|   635k|      {"\000\000A\000\003\010", 0x00c4},
  434|   635k|#line 124 "./uninorm/composition-table.gperf"
  435|   635k|      {"\000\000I\000\003\006", 0x012c},
  436|   635k|#line 74 "./uninorm/composition-table.gperf"
  437|   635k|      {"\000\000o\000\003\001", 0x00f3},
  438|   635k|#line 73 "./uninorm/composition-table.gperf"
  439|   635k|      {"\000\000o\000\003\000", 0x00f2},
  440|   635k|#line 126 "./uninorm/composition-table.gperf"
  441|   635k|      {"\000\000I\000\003(", 0x012e},
  442|   635k|#line 75 "./uninorm/composition-table.gperf"
  443|   635k|      {"\000\000o\000\003\002", 0x00f4},
  444|   635k|#line 278 "./uninorm/composition-table.gperf"
  445|   635k|      {"\000\000o\000\003\007", 0x022f},
  446|   635k|#line 240 "./uninorm/composition-table.gperf"
  447|   635k|      {"\000\000a\000\003\017", 0x0201},
  448|   635k|#line 225 "./uninorm/composition-table.gperf"
  449|   635k|      {"\000\001\353\000\003\004", 0x01ed},
  450|   635k|#line 67 "./uninorm/composition-table.gperf"
  451|   635k|      {"\000\000e\000\003\010", 0x00eb},
  452|   635k|#line 342 "./uninorm/composition-table.gperf"
  453|   635k|      {"\000\004\036\000\003\010", 0x04e6},
  454|   635k|#line 79 "./uninorm/composition-table.gperf"
  455|   635k|      {"\000\000u\000\003\001", 0x00fa},
  456|   635k|#line 78 "./uninorm/composition-table.gperf"
  457|   635k|      {"\000\000u\000\003\000", 0x00f9},
  458|   635k|#line 765 "./uninorm/composition-table.gperf"
  459|   635k|      {"\000\037\012\000\003E", 0x1f8a},
  460|   635k|#line 80 "./uninorm/composition-table.gperf"
  461|   635k|      {"\000\000u\000\003\002", 0x00fb},
  462|   635k|#line 96 "./uninorm/composition-table.gperf"
  463|   635k|      {"\000\000C\000\003\014", 0x010c},
  464|   635k|#line 215 "./uninorm/composition-table.gperf"
  465|   635k|      {"\000\002'\000\003\004", 0x01e1},
  466|   635k|#line 696 "./uninorm/composition-table.gperf"
  467|   635k|      {"\000\0370\000\003\001", 0x1f34},
  468|   635k|#line 694 "./uninorm/composition-table.gperf"
  469|   635k|      {"\000\0370\000\003\000", 0x1f32},
  470|   635k|#line 698 "./uninorm/composition-table.gperf"
  471|   635k|      {"\000\0370\000\003B", 0x1f36},
  472|   635k|#line 802 "./uninorm/composition-table.gperf"
  473|   635k|      {"\000\037o\000\003E", 0x1faf},
  474|   635k|#line 561 "./uninorm/composition-table.gperf"
  475|   635k|      {"\000\000a\000\003\011", 0x1ea3},
  476|   635k|#line 273 "./uninorm/composition-table.gperf"
  477|   635k|      {"\000\000\326\000\003\004", 0x022a},
  478|   635k|#line 248 "./uninorm/composition-table.gperf"
  479|   635k|      {"\000\000i\000\003\017", 0x0209},
  480|   635k|#line 227 "./uninorm/composition-table.gperf"
  481|   635k|      {"\000\002\222\000\003\014", 0x01ef},
  482|   635k|#line 34 "./uninorm/composition-table.gperf"
  483|   635k|      {"\000\000A\000\003\003", 0x00c3},
  484|   635k|#line 784 "./uninorm/composition-table.gperf"
  485|   635k|      {"\000\037-\000\003E", 0x1f9d},
  486|   635k|#line 274 "./uninorm/composition-table.gperf"
  487|   635k|      {"\000\000\366\000\003\004", 0x022b},
  488|   635k|#line 760 "./uninorm/composition-table.gperf"
  489|   635k|      {"\000\037\005\000\003E", 0x1f85},
  490|   635k|#line 86 "./uninorm/composition-table.gperf"
  491|   635k|      {"\000\000A\000\003\006", 0x0102},
  492|   635k|#line 276 "./uninorm/composition-table.gperf"
  493|   635k|      {"\000\000\365\000\003\004", 0x022d},
  494|   635k|#line 768 "./uninorm/composition-table.gperf"
  495|   635k|      {"\000\037\015\000\003E", 0x1f8d},
  496|   635k|#line 88 "./uninorm/composition-table.gperf"
  497|   635k|      {"\000\000A\000\003(", 0x0104},
  498|   635k|#line 217 "./uninorm/composition-table.gperf"
  499|   635k|      {"\000\000\346\000\003\004", 0x01e3},
  500|   635k|#line 587 "./uninorm/composition-table.gperf"
  501|   635k|      {"\000\000e\000\003\003", 0x1ebd},
  502|   635k|#line 77 "./uninorm/composition-table.gperf"
  503|   635k|      {"\000\000o\000\003\010", 0x00f6},
  504|   635k|#line 85 "./uninorm/composition-table.gperf"
  505|   635k|      {"\000\000a\000\003\004", 0x0101},
  506|   635k|#line 599 "./uninorm/composition-table.gperf"
  507|   635k|      {"\000\000i\000\003\011", 0x1ec9},
  508|   635k|#line 103 "./uninorm/composition-table.gperf"
  509|   635k|      {"\000\000e\000\003\006", 0x0115},
  510|   635k|#line 197 "./uninorm/composition-table.gperf"
  511|   635k|      {"\000\000a\000\003\014", 0x01ce},
  512|   635k|#line 388 "./uninorm/composition-table.gperf"
  513|   635k|      {"\000\015\331\000\015\317", 0x0ddc},
  514|   635k|#line 107 "./uninorm/composition-table.gperf"
  515|   635k|      {"\000\000e\000\003(", 0x0119},
  516|   635k|#line 247 "./uninorm/composition-table.gperf"
  517|   635k|      {"\000\000I\000\003\017", 0x0208},
  518|   635k|#line 782 "./uninorm/composition-table.gperf"
  519|   635k|      {"\000\037+\000\003E", 0x1f9b},
  520|   635k|#line 81 "./uninorm/composition-table.gperf"
  521|   635k|      {"\000\000u\000\003\010", 0x00fc},
  522|   635k|#line 39 "./uninorm/composition-table.gperf"
  523|   635k|      {"\000\000E\000\003\001", 0x00c9},
  524|   635k|#line 38 "./uninorm/composition-table.gperf"
  525|   635k|      {"\000\000E\000\003\000", 0x00c8},
  526|   635k|#line 204 "./uninorm/composition-table.gperf"
  527|   635k|      {"\000\000\334\000\003\004", 0x01d5},
  528|   635k|#line 40 "./uninorm/composition-table.gperf"
  529|   635k|      {"\000\000E\000\003\002", 0x00ca},
  530|   635k|#line 104 "./uninorm/composition-table.gperf"
  531|   635k|      {"\000\000E\000\003\007", 0x0116},
  532|   635k|#line 208 "./uninorm/composition-table.gperf"
  533|   635k|      {"\000\000\334\000\003\014", 0x01d9},
  534|   635k|#line 212 "./uninorm/composition-table.gperf"
  535|   635k|      {"\000\000\304\000\003\004", 0x01de},
  536|   635k|#line 123 "./uninorm/composition-table.gperf"
  537|   635k|      {"\000\000i\000\003\004", 0x012b},
  538|   635k|#line 213 "./uninorm/composition-table.gperf"
  539|   635k|      {"\000\000\344\000\003\004", 0x01df},
  540|   635k|#line 306 "./uninorm/composition-table.gperf"
  541|   635k|      {"\000\004\025\000\003\000", 0x0400},
  542|   635k|#line 199 "./uninorm/composition-table.gperf"
  543|   635k|      {"\000\000i\000\003\014", 0x01d0},
  544|   635k|#line 598 "./uninorm/composition-table.gperf"
  545|   635k|      {"\000\000I\000\003\011", 0x1ec8},
  546|   635k|#line 390 "./uninorm/composition-table.gperf"
  547|   635k|      {"\000\015\331\000\015\337", 0x0dde},
  548|   635k|#line 48 "./uninorm/composition-table.gperf"
  549|   635k|      {"\000\000O\000\003\001", 0x00d3},
  550|   635k|#line 47 "./uninorm/composition-table.gperf"
  551|   635k|      {"\000\000O\000\003\000", 0x00d2},
  552|   635k|#line 76 "./uninorm/composition-table.gperf"
  553|   635k|      {"\000\000o\000\003\003", 0x00f5},
  554|   635k|#line 49 "./uninorm/composition-table.gperf"
  555|   635k|      {"\000\000O\000\003\002", 0x00d4},
  556|   635k|#line 277 "./uninorm/composition-table.gperf"
  557|   635k|      {"\000\000O\000\003\007", 0x022e},
  558|   635k|#line 349 "./uninorm/composition-table.gperf"
  559|   635k|      {"\000\004C\000\003\004", 0x04ef},
  560|   635k|#line 148 "./uninorm/composition-table.gperf"
  561|   635k|      {"\000\000o\000\003\006", 0x014f},
  562|   635k|#line 328 "./uninorm/composition-table.gperf"
  563|   635k|      {"\000\004\020\000\003\010", 0x04d2},
  564|   635k|#line 954 "./uninorm/composition-table.gperf"
  565|   635k|      {"\0000\357\0000\231", 0x30f7},
  566|   635k|#line 223 "./uninorm/composition-table.gperf"
  567|   635k|      {"\000\000o\000\003(", 0x01eb},
  568|   635k|#line 924 "./uninorm/composition-table.gperf"
  569|   635k|      {"\0000{\0000\231", 0x307c},
  570|   635k|#line 170 "./uninorm/composition-table.gperf"
  571|   635k|      {"\000\000u\000\003\003", 0x0169},
  572|   635k|#line 239 "./uninorm/composition-table.gperf"
  573|   635k|      {"\000\000A\000\003\017", 0x0200},
  574|   635k|#line 122 "./uninorm/composition-table.gperf"
  575|   635k|      {"\000\000I\000\003\004", 0x012a},
  576|   635k|#line 367 "./uninorm/composition-table.gperf"
  577|   635k|      {"\000\0110\000\011<", 0x0931},
  578|   635k|#line 174 "./uninorm/composition-table.gperf"
  579|   635k|      {"\000\000u\000\003\006", 0x016d},
  580|   635k|#line 198 "./uninorm/composition-table.gperf"
  581|   635k|      {"\000\000I\000\003\014", 0x01cf},
  582|   635k|#line 926 "./uninorm/composition-table.gperf"
  583|   635k|      {"\0000F\0000\231", 0x3094},
  584|   635k|#line 180 "./uninorm/composition-table.gperf"
  585|   635k|      {"\000\000u\000\003(", 0x0173},
  586|   635k|#line 541 "./uninorm/composition-table.gperf"
  587|   635k|      {"\000\000X\000\003\007", 0x1e8a},
  588|   635k|#line 41 "./uninorm/composition-table.gperf"
  589|   635k|      {"\000\000E\000\003\010", 0x00cb},
  590|   635k|#line 244 "./uninorm/composition-table.gperf"
  591|   635k|      {"\000\000e\000\003\017", 0x0205},
  592|   635k|#line 53 "./uninorm/composition-table.gperf"
  593|   635k|      {"\000\000U\000\003\001", 0x00da},
  594|   635k|#line 52 "./uninorm/composition-table.gperf"
  595|   635k|      {"\000\000U\000\003\000", 0x00d9},
  596|   635k|#line 925 "./uninorm/composition-table.gperf"
  597|   635k|      {"\0000{\0000\232", 0x307d},
  598|   635k|#line 54 "./uninorm/composition-table.gperf"
  599|   635k|      {"\000\000U\000\003\002", 0x00db},
  600|   635k|#line 560 "./uninorm/composition-table.gperf"
  601|   635k|      {"\000\000A\000\003\011", 0x1ea2},
  602|   635k|#line 460 "./uninorm/composition-table.gperf"
  603|   635k|      {"\000\0367\000\003\004", 0x1e39},
  604|   635k|#line 307 "./uninorm/composition-table.gperf"
  605|   635k|      {"\000\004\025\000\003\010", 0x0401},
  606|   635k|#line 205 "./uninorm/composition-table.gperf"
  607|   635k|      {"\000\000\374\000\003\004", 0x01d6},
  608|   635k|#line 775 "./uninorm/composition-table.gperf"
  609|   635k|      {"\000\037$\000\003E", 0x1f94},
  610|   635k|#line 912 "./uninorm/composition-table.gperf"
  611|   635k|      {"\0000a\0000\231", 0x3062},
  612|   635k|#line 209 "./uninorm/composition-table.gperf"
  613|   635k|      {"\000\000\374\000\003\014", 0x01da},
  614|   635k|#line 51 "./uninorm/composition-table.gperf"
  615|   635k|      {"\000\000O\000\003\010", 0x00d6},
  616|   635k|#line 346 "./uninorm/composition-table.gperf"
  617|   635k|      {"\000\004-\000\003\010", 0x04ec},
  618|   635k|#line 585 "./uninorm/composition-table.gperf"
  619|   635k|      {"\000\000e\000\003\011", 0x1ebb},
  620|   635k|#line 326 "./uninorm/composition-table.gperf"
  621|   635k|      {"\000\004\020\000\003\006", 0x04d0},
  622|   635k|#line 329 "./uninorm/composition-table.gperf"
  623|   635k|      {"\000\0040\000\003\010", 0x04d3},
  624|   635k|#line 559 "./uninorm/composition-table.gperf"
  625|   635k|      {"\000\000a\000\003#", 0x1ea1},
  626|   635k|#line 82 "./uninorm/composition-table.gperf"
  627|   635k|      {"\000\000y\000\003\001", 0x00fd},
  628|   635k|#line 641 "./uninorm/composition-table.gperf"
  629|   635k|      {"\000\000y\000\003\000", 0x1ef3},
  630|   635k|#line 84 "./uninorm/composition-table.gperf"
  631|   635k|      {"\000\000A\000\003\004", 0x0100},
  632|   635k|#line 184 "./uninorm/composition-table.gperf"
  633|   635k|      {"\000\000y\000\003\002", 0x0177},
  634|   635k|#line 546 "./uninorm/composition-table.gperf"
  635|   635k|      {"\000\000y\000\003\007", 0x1e8f},
  636|   635k|#line 196 "./uninorm/composition-table.gperf"
  637|   635k|      {"\000\000A\000\003\014", 0x01cd},
  638|   635k|#line 586 "./uninorm/composition-table.gperf"
  639|   635k|      {"\000\000E\000\003\003", 0x1ebc},
  640|   635k|#line 940 "./uninorm/composition-table.gperf"
  641|   635k|      {"\0000\304\0000\231", 0x30c5},
  642|   635k|#line 252 "./uninorm/composition-table.gperf"
  643|   635k|      {"\000\000o\000\003\017", 0x020d},
  644|   635k|#line 543 "./uninorm/composition-table.gperf"
  645|   635k|      {"\000\000X\000\003\010", 0x1e8c},
  646|   635k|#line 102 "./uninorm/composition-table.gperf"
  647|   635k|      {"\000\000E\000\003\006", 0x0114},
  648|   635k|#line 101 "./uninorm/composition-table.gperf"
  649|   635k|      {"\000\000e\000\003\004", 0x0113},
  650|   635k|#line 356 "./uninorm/composition-table.gperf"
  651|   635k|      {"\000\004+\000\003\010", 0x04f8},
  652|   635k|#line 106 "./uninorm/composition-table.gperf"
  653|   635k|      {"\000\000E\000\003(", 0x0118},
  654|   635k|#line 109 "./uninorm/composition-table.gperf"
  655|   635k|      {"\000\000e\000\003\014", 0x011b},
  656|   635k|#line 601 "./uninorm/composition-table.gperf"
  657|   635k|      {"\000\000i\000\003#", 0x1ecb},
  658|   635k|#line 55 "./uninorm/composition-table.gperf"
  659|   635k|      {"\000\000U\000\003\010", 0x00dc},
  660|   635k|#line 260 "./uninorm/composition-table.gperf"
  661|   635k|      {"\000\000u\000\003\017", 0x0215},
  662|   635k|#line 330 "./uninorm/composition-table.gperf"
  663|   635k|      {"\000\004\025\000\003\006", 0x04d6},
  664|   635k|#line 50 "./uninorm/composition-table.gperf"
  665|   635k|      {"\000\000O\000\003\003", 0x00d5},
  666|   635k|#line 530 "./uninorm/composition-table.gperf"
  667|   635k|      {"\000\000v\000\003#", 0x1e7f},
  668|   635k|#line 510 "./uninorm/composition-table.gperf"
  669|   635k|      {"\000\000t\000\003\007", 0x1e6b},
  670|   635k|#line 605 "./uninorm/composition-table.gperf"
  671|   635k|      {"\000\000o\000\003\011", 0x1ecf},
  672|   635k|#line 147 "./uninorm/composition-table.gperf"
  673|   635k|      {"\000\000O\000\003\006", 0x014e},
  674|   635k|#line 425 "./uninorm/composition-table.gperf"
  675|   635k|      {"\000\001\022\000\003\001", 0x1e16},
  676|   635k|#line 423 "./uninorm/composition-table.gperf"
  677|   635k|      {"\000\001\022\000\003\000", 0x1e14},
  678|   635k|#line 222 "./uninorm/composition-table.gperf"
  679|   635k|      {"\000\000O\000\003(", 0x01ea},
  680|   635k|#line 327 "./uninorm/composition-table.gperf"
  681|   635k|      {"\000\0040\000\003\006", 0x04d1},
  682|   635k|#line 958 "./uninorm/composition-table.gperf"
  683|   635k|      {"\0000\375\0000\231", 0x30fe},
  684|   635k|#line 957 "./uninorm/composition-table.gperf"
  685|   635k|      {"\0000\362\0000\231", 0x30fa},
  686|   635k|#line 266 "./uninorm/composition-table.gperf"
  687|   635k|      {"\000\000t\000\003&", 0x021b},
  688|   635k|#line 629 "./uninorm/composition-table.gperf"
  689|   635k|      {"\000\000u\000\003\011", 0x1ee7},
  690|   635k|#line 152 "./uninorm/composition-table.gperf"
  691|   635k|      {"\000\000r\000\003\001", 0x0155},
  692|   635k|#line 83 "./uninorm/composition-table.gperf"
  693|   635k|      {"\000\000y\000\003\010", 0x00ff},
  694|   635k|#line 600 "./uninorm/composition-table.gperf"
  695|   635k|      {"\000\000I\000\003#", 0x1eca},
  696|   635k|#line 815 "./uninorm/composition-table.gperf"
  697|   635k|      {"\000\037t\000\003E", 0x1fc2},
  698|   635k|#line 492 "./uninorm/composition-table.gperf"
  699|   635k|      {"\000\000r\000\003\007", 0x1e59},
  700|   635k|#line 146 "./uninorm/composition-table.gperf"
  701|   635k|      {"\000\000o\000\003\004", 0x014d},
  702|   635k|#line 956 "./uninorm/composition-table.gperf"
  703|   635k|      {"\0000\361\0000\231", 0x30f9},
  704|   635k|#line 955 "./uninorm/composition-table.gperf"
  705|   635k|      {"\0000\360\0000\231", 0x30f8},
  706|   635k|#line 201 "./uninorm/composition-table.gperf"
  707|   635k|      {"\000\000o\000\003\014", 0x01d2},
  708|   635k|#line 169 "./uninorm/composition-table.gperf"
  709|   635k|      {"\000\000U\000\003\003", 0x0168},
  710|   635k|#line 411 "./uninorm/composition-table.gperf"
  711|   635k|      {"\000\000\307\000\003\001", 0x1e08},
  712|   635k|#line 140 "./uninorm/composition-table.gperf"
  713|   635k|      {"\000\000n\000\003\001", 0x0144},
  714|   635k|#line 232 "./uninorm/composition-table.gperf"
  715|   635k|      {"\000\000n\000\003\000", 0x01f9},
  716|   635k|#line 173 "./uninorm/composition-table.gperf"
  717|   635k|      {"\000\000U\000\003\006", 0x016c},
  718|   635k|#line 172 "./uninorm/composition-table.gperf"
  719|   635k|      {"\000\000u\000\003\004", 0x016b},
  720|   635k|#line 472 "./uninorm/composition-table.gperf"
  721|   635k|      {"\000\000n\000\003\007", 0x1e45},
  722|   635k|#line 179 "./uninorm/composition-table.gperf"
  723|   635k|      {"\000\000U\000\003(", 0x0172},
  724|   635k|#line 203 "./uninorm/composition-table.gperf"
  725|   635k|      {"\000\000u\000\003\014", 0x01d4},
  726|   635k|#line 554 "./uninorm/composition-table.gperf"
  727|   635k|      {"\000\000t\000\003\010", 0x1e97},
  728|   635k|#line 243 "./uninorm/composition-table.gperf"
  729|   635k|      {"\000\000E\000\003\017", 0x0204},
  730|   635k|#line 669 "./uninorm/composition-table.gperf"
  731|   635k|      {"\000\037\021\000\003\001", 0x1f15},
  732|   635k|#line 667 "./uninorm/composition-table.gperf"
  733|   635k|      {"\000\037\021\000\003\000", 0x1f13},
  734|   635k|#line 785 "./uninorm/composition-table.gperf"
  735|   635k|      {"\000\037.\000\003E", 0x1f9e},
  736|   635k|#line 414 "./uninorm/composition-table.gperf"
  737|   635k|      {"\000\000d\000\003\007", 0x1e0b},
  738|   635k|#line 242 "./uninorm/composition-table.gperf"
  739|   635k|      {"\000\000a\000\003\021", 0x0203},
  740|   635k|#line 405 "./uninorm/composition-table.gperf"
  741|   635k|      {"\000\000B\000\003\007", 0x1e02},
  742|   635k|#line 647 "./uninorm/composition-table.gperf"
  743|   635k|      {"\000\000y\000\003\003", 0x1ef9},
  744|   635k|#line 942 "./uninorm/composition-table.gperf"
  745|   635k|      {"\0000\310\0000\231", 0x30c9},
  746|   635k|#line 384 "./uninorm/composition-table.gperf"
  747|   635k|      {"\000\015F\000\015>", 0x0d4a},
  748|   635k|#line 801 "./uninorm/composition-table.gperf"
  749|   635k|      {"\000\037n\000\003E", 0x1fae},
  750|   635k|#line 558 "./uninorm/composition-table.gperf"
  751|   635k|      {"\000\000A\000\003#", 0x1ea0},
  752|   635k|#line 960 "./uninorm/composition-table.gperf"
  753|   635k|      {"\001\020\233\001\020\272", 0x1109c},
  754|   635k|#line 251 "./uninorm/composition-table.gperf"
  755|   635k|      {"\000\000O\000\003\017", 0x020c},
  756|   635k|#line 584 "./uninorm/composition-table.gperf"
  757|   635k|      {"\000\000E\000\003\011", 0x1eba},
  758|   635k|#line 335 "./uninorm/composition-table.gperf"
  759|   635k|      {"\000\0046\000\003\010", 0x04dd},
  760|   635k|#line 766 "./uninorm/composition-table.gperf"
  761|   635k|      {"\000\037\013\000\003E", 0x1f8b},
  762|   635k|#line 323 "./uninorm/composition-table.gperf"
  763|   635k|      {"\000\004u\000\003\017", 0x0477},
  764|   635k|#line 791 "./uninorm/composition-table.gperf"
  765|   635k|      {"\000\037d\000\003E", 0x1fa4},
  766|   635k|#line 319 "./uninorm/composition-table.gperf"
  767|   635k|      {"\000\004:\000\003\001", 0x045c},
  768|   635k|#line 583 "./uninorm/composition-table.gperf"
  769|   635k|      {"\000\000e\000\003#", 0x1eb9},
  770|   635k|#line 250 "./uninorm/composition-table.gperf"
  771|   635k|      {"\000\000i\000\003\021", 0x020b},
  772|   635k|#line 118 "./uninorm/composition-table.gperf"
  773|   635k|      {"\000\000H\000\003\002", 0x0124},
  774|   635k|#line 437 "./uninorm/composition-table.gperf"
  775|   635k|      {"\000\000H\000\003\007", 0x1e22},
  776|   635k|#line 62 "./uninorm/composition-table.gperf"
  777|   635k|      {"\000\000a\000\003\012", 0x00e5},
  778|   635k|#line 718 "./uninorm/composition-table.gperf"
  779|   635k|      {"\000\037H\000\003\001", 0x1f4c},
  780|   635k|#line 716 "./uninorm/composition-table.gperf"
  781|   635k|      {"\000\037H\000\003\000", 0x1f4a},
  782|   635k|#line 604 "./uninorm/composition-table.gperf"
  783|   635k|      {"\000\000O\000\003\011", 0x1ece},
  784|   635k|#line 936 "./uninorm/composition-table.gperf"
  785|   635k|      {"\0000\273\0000\231", 0x30bc},
  786|   635k|#line 100 "./uninorm/composition-table.gperf"
  787|   635k|      {"\000\000E\000\003\004", 0x0112},
  788|   635k|#line 56 "./uninorm/composition-table.gperf"
  789|   635k|      {"\000\000Y\000\003\001", 0x00dd},
  790|   635k|#line 640 "./uninorm/composition-table.gperf"
  791|   635k|      {"\000\000Y\000\003\000", 0x1ef2},
  792|   635k|#line 108 "./uninorm/composition-table.gperf"
  793|   635k|      {"\000\000E\000\003\014", 0x011a},
  794|   635k|#line 183 "./uninorm/composition-table.gperf"
  795|   635k|      {"\000\000Y\000\003\002", 0x0176},
  796|   635k|#line 545 "./uninorm/composition-table.gperf"
  797|   635k|      {"\000\000Y\000\003\007", 0x1e8e},
  798|   635k|#line 259 "./uninorm/composition-table.gperf"
  799|   635k|      {"\000\000U\000\003\017", 0x0214},
  800|   635k|#line 730 "./uninorm/composition-table.gperf"
  801|   635k|      {"\000\037Y\000\003\001", 0x1f5d},
  802|   635k|#line 729 "./uninorm/composition-table.gperf"
  803|   635k|      {"\000\037Y\000\003\000", 0x1f5b},
  804|   635k|#line 731 "./uninorm/composition-table.gperf"
  805|   635k|      {"\000\037Y\000\003B", 0x1f5f},
  806|   635k|#line 916 "./uninorm/composition-table.gperf"
  807|   635k|      {"\0000o\0000\231", 0x3070},
  808|   635k|#line 249 "./uninorm/composition-table.gperf"
  809|   635k|      {"\000\000I\000\003\021", 0x020a},
  810|   635k|#line 937 "./uninorm/composition-table.gperf"
  811|   635k|      {"\0000\275\0000\231", 0x30be},
  812|   635k|#line 145 "./uninorm/composition-table.gperf"
  813|   635k|      {"\000\000O\000\003\004", 0x014c},
  814|   635k|#line 479 "./uninorm/composition-table.gperf"
  815|   635k|      {"\000\000\325\000\003\001", 0x1e4c},
  816|   635k|#line 325 "./uninorm/composition-table.gperf"
  817|   635k|      {"\000\0046\000\003\006", 0x04c2},
  818|   635k|#line 200 "./uninorm/composition-table.gperf"
  819|   635k|      {"\000\000O\000\003\014", 0x01d1},
  820|   635k|#line 603 "./uninorm/composition-table.gperf"
  821|   635k|      {"\000\000o\000\003#", 0x1ecd},
  822|   635k|#line 523 "./uninorm/composition-table.gperf"
  823|   635k|      {"\000\001h\000\003\001", 0x1e78},
  824|   635k|#line 920 "./uninorm/composition-table.gperf"
  825|   635k|      {"\0000u\0000\231", 0x3076},
  826|   635k|#line 628 "./uninorm/composition-table.gperf"
  827|   635k|      {"\000\000U\000\003\011", 0x1ee6},
  828|   635k|#line 72 "./uninorm/composition-table.gperf"
  829|   635k|      {"\000\000n\000\003\003", 0x00f1},
  830|   635k|#line 929 "./uninorm/composition-table.gperf"
  831|   635k|      {"\0000\255\0000\231", 0x30ae},
  832|   635k|#line 441 "./uninorm/composition-table.gperf"
  833|   635k|      {"\000\000H\000\003\010", 0x1e26},
  834|   635k|#line 917 "./uninorm/composition-table.gperf"
  835|   635k|      {"\0000o\0000\232", 0x3071},
  836|   635k|#line 466 "./uninorm/composition-table.gperf"
  837|   635k|      {"\000\000m\000\003\001", 0x1e3f},
  838|   635k|#line 627 "./uninorm/composition-table.gperf"
  839|   635k|      {"\000\000u\000\003#", 0x1ee5},
  840|   635k|#line 119 "./uninorm/composition-table.gperf"
  841|   635k|      {"\000\000h\000\003\002", 0x0125},
  842|   635k|#line 438 "./uninorm/composition-table.gperf"
  843|   635k|      {"\000\000h\000\003\007", 0x1e23},
  844|   635k|#line 468 "./uninorm/composition-table.gperf"
  845|   635k|      {"\000\000m\000\003\007", 0x1e41},
  846|   635k|#line 744 "./uninorm/composition-table.gperf"
  847|   635k|      {"\000\037h\000\003\001", 0x1f6c},
  848|   635k|#line 742 "./uninorm/composition-table.gperf"
  849|   635k|      {"\000\037h\000\003\000", 0x1f6a},
  850|   635k|#line 746 "./uninorm/composition-table.gperf"
  851|   635k|      {"\000\037h\000\003B", 0x1f6e},
  852|   635k|#line 921 "./uninorm/composition-table.gperf"
  853|   635k|      {"\0000u\0000\232", 0x3077},
  854|   635k|#line 185 "./uninorm/composition-table.gperf"
  855|   635k|      {"\000\000Y\000\003\010", 0x0178},
  856|   635k|#line 171 "./uninorm/composition-table.gperf"
  857|   635k|      {"\000\000U\000\003\004", 0x016a},
  858|   635k|#line 386 "./uninorm/composition-table.gperf"
  859|   635k|      {"\000\015F\000\015W", 0x0d4c},
  860|   635k|#line 645 "./uninorm/composition-table.gperf"
  861|   635k|      {"\000\000y\000\003\011", 0x1ef7},
  862|   635k|#line 202 "./uninorm/composition-table.gperf"
  863|   635k|      {"\000\000U\000\003\014", 0x01d3},
  864|   635k|#line 241 "./uninorm/composition-table.gperf"
  865|   635k|      {"\000\000A\000\003\021", 0x0202},
  866|   635k|#line 37 "./uninorm/composition-table.gperf"
  867|   635k|      {"\000\000C\000\003'", 0x00c7},
  868|   635k|#line 773 "./uninorm/composition-table.gperf"
  869|   635k|      {"\000\037\"\000\003E", 0x1f92},
  870|   635k|#line 795 "./uninorm/composition-table.gperf"
  871|   635k|      {"\000\037h\000\003E", 0x1fa8},
  872|   635k|#line 800 "./uninorm/composition-table.gperf"
  873|   635k|      {"\000\037m\000\003E", 0x1fad},
  874|   635k|#line 688 "./uninorm/composition-table.gperf"
  875|   635k|      {"\000\037(\000\003\001", 0x1f2c},
  876|   635k|#line 686 "./uninorm/composition-table.gperf"
  877|   635k|      {"\000\037(\000\003\000", 0x1f2a},
  878|   635k|#line 690 "./uninorm/composition-table.gperf"
  879|   635k|      {"\000\037(\000\003B", 0x1f2e},
  880|   635k|#line 481 "./uninorm/composition-table.gperf"
  881|   635k|      {"\000\000\325\000\003\010", 0x1e4e},
  882|   635k|#line 246 "./uninorm/composition-table.gperf"
  883|   635k|      {"\000\000e\000\003\021", 0x0207},
  884|   635k|#line 697 "./uninorm/composition-table.gperf"
  885|   635k|      {"\000\0371\000\003\001", 0x1f35},
  886|   635k|#line 695 "./uninorm/composition-table.gperf"
  887|   635k|      {"\000\0371\000\003\000", 0x1f33},
  888|   635k|#line 699 "./uninorm/composition-table.gperf"
  889|   635k|      {"\000\0371\000\003B", 0x1f37},
  890|   635k|#line 282 "./uninorm/composition-table.gperf"
  891|   635k|      {"\000\000y\000\003\004", 0x0233},
  892|   635k|#line 953 "./uninorm/composition-table.gperf"
  893|   635k|      {"\0000\246\0000\231", 0x30f4},
  894|   635k|#line 428 "./uninorm/composition-table.gperf"
  895|   635k|      {"\000\000e\000\003-", 0x1e19},
  896|   635k|#line 256 "./uninorm/composition-table.gperf"
  897|   635k|      {"\000\000r\000\003\017", 0x0211},
  898|   635k|#line 779 "./uninorm/composition-table.gperf"
  899|   635k|      {"\000\037(\000\003E", 0x1f98},
  900|   635k|#line 442 "./uninorm/composition-table.gperf"
  901|   635k|      {"\000\000h\000\003\010", 0x1e27},
  902|   635k|#line 36 "./uninorm/composition-table.gperf"
  903|   635k|      {"\000\000A\000\003\012", 0x00c5},
  904|   635k|#line 646 "./uninorm/composition-table.gperf"
  905|   635k|      {"\000\000Y\000\003\003", 0x1ef8},
  906|   635k|#line 582 "./uninorm/composition-table.gperf"
  907|   635k|      {"\000\000E\000\003#", 0x1eb8},
  908|   635k|#line 533 "./uninorm/composition-table.gperf"
  909|   635k|      {"\000\000W\000\003\001", 0x1e82},
  910|   635k|#line 531 "./uninorm/composition-table.gperf"
  911|   635k|      {"\000\000W\000\003\000", 0x1e80},
  912|   635k|#line 151 "./uninorm/composition-table.gperf"
  913|   635k|      {"\000\000R\000\003\001", 0x0154},
  914|   635k|#line 181 "./uninorm/composition-table.gperf"
  915|   635k|      {"\000\000W\000\003\002", 0x0174},
  916|   635k|#line 537 "./uninorm/composition-table.gperf"
  917|   635k|      {"\000\000W\000\003\007", 0x1e86},
  918|   635k|#line 903 "./uninorm/composition-table.gperf"
  919|   635k|      {"\0000O\0000\231", 0x3050},
  920|   635k|#line 491 "./uninorm/composition-table.gperf"
  921|   635k|      {"\000\000R\000\003\007", 0x1e58},
  922|   635k|#line 869 "./uninorm/composition-table.gperf"
  923|   635k|      {"\000\"C\000\0038", 0x2244},
  924|   635k|#line 863 "./uninorm/composition-table.gperf"
  925|   635k|      {"\000\"\003\000\0038", 0x2204},
  926|   635k|#line 864 "./uninorm/composition-table.gperf"
  927|   635k|      {"\000\"\010\000\0038", 0x2209},
  928|   635k|#line 884 "./uninorm/composition-table.gperf"
  929|   635k|      {"\000\"{\000\0038", 0x2281},
  930|   635k|#line 168 "./uninorm/composition-table.gperf"
  931|   635k|      {"\000\000t\000\003\014", 0x0165},
  932|   635k|#line 602 "./uninorm/composition-table.gperf"
  933|   635k|      {"\000\000O\000\003#", 0x1ecc},
  934|   635k|#line 254 "./uninorm/composition-table.gperf"
  935|   635k|      {"\000\000o\000\003\021", 0x020f},
  936|   635k|#line 459 "./uninorm/composition-table.gperf"
  937|   635k|      {"\000\0366\000\003\004", 0x1e38},
  938|   635k|#line 229 "./uninorm/composition-table.gperf"
  939|   635k|      {"\000\000G\000\003\001", 0x01f4},
  940|   635k|#line 899 "./uninorm/composition-table.gperf"
  941|   635k|      {"\000\"\264\000\0038", 0x22ec},
  942|   635k|#line 897 "./uninorm/composition-table.gperf"
  943|   635k|      {"\000\"\262\000\0038", 0x22ea},
  944|   635k|#line 110 "./uninorm/composition-table.gperf"
  945|   635k|      {"\000\000G\000\003\002", 0x011c},
  946|   635k|#line 114 "./uninorm/composition-table.gperf"
  947|   635k|      {"\000\000G\000\003\007", 0x0120},
  948|   635k|#line 279 "./uninorm/composition-table.gperf"
  949|   635k|      {"\000\002.\000\003\004", 0x0230},
  950|   635k|#line 868 "./uninorm/composition-table.gperf"
  951|   635k|      {"\000\"<\000\0038", 0x2241},
  952|   635k|#line 262 "./uninorm/composition-table.gperf"
  953|   635k|      {"\000\000u\000\003\021", 0x0217},
  954|   635k|#line 896 "./uninorm/composition-table.gperf"
  955|   635k|      {"\000\"\222\000\0038", 0x22e3},
  956|   635k|#line 448 "./uninorm/composition-table.gperf"
  957|   635k|      {"\000\000i\000\0030", 0x1e2d},
  958|   635k|#line 889 "./uninorm/composition-table.gperf"
  959|   635k|      {"\000\"\242\000\0038", 0x22ac},
  960|   635k|#line 156 "./uninorm/composition-table.gperf"
  961|   635k|      {"\000\000r\000\003\014", 0x0159},
  962|   635k|#line 906 "./uninorm/composition-table.gperf"
  963|   635k|      {"\0000U\0000\231", 0x3056},
  964|   635k|#line 522 "./uninorm/composition-table.gperf"
  965|   635k|      {"\000\000u\000\003-", 0x1e77},
  966|   635k|#line 927 "./uninorm/composition-table.gperf"
  967|   635k|      {"\0000\235\0000\231", 0x309e},
  968|   635k|#line 322 "./uninorm/composition-table.gperf"
  969|   635k|      {"\000\004t\000\003\017", 0x0476},
  970|   635k|#line 873 "./uninorm/composition-table.gperf"
  971|   635k|      {"\000\"a\000\0038", 0x2262},
  972|   635k|#line 431 "./uninorm/composition-table.gperf"
  973|   635k|      {"\000\002(\000\003\006", 0x1e1c},
  974|   635k|#line 535 "./uninorm/composition-table.gperf"
  975|   635k|      {"\000\000W\000\003\010", 0x1e84},
  976|   635k|#line 626 "./uninorm/composition-table.gperf"
  977|   635k|      {"\000\000U\000\003#", 0x1ee4},
  978|   635k|#line 139 "./uninorm/composition-table.gperf"
  979|   635k|      {"\000\000N\000\003\001", 0x0143},
  980|   635k|#line 231 "./uninorm/composition-table.gperf"
  981|   635k|      {"\000\000N\000\003\000", 0x01f8},
  982|   635k|#line 144 "./uninorm/composition-table.gperf"
  983|   635k|      {"\000\000n\000\003\014", 0x0148},
  984|   635k|#line 366 "./uninorm/composition-table.gperf"
  985|   635k|      {"\000\011(\000\011<", 0x0929},
  986|   635k|#line 471 "./uninorm/composition-table.gperf"
  987|   635k|      {"\000\000N\000\003\007", 0x1e44},
  988|   635k|#line 888 "./uninorm/composition-table.gperf"
  989|   635k|      {"\000\"\207\000\0038", 0x2289},
  990|   635k|#line 176 "./uninorm/composition-table.gperf"
  991|   635k|      {"\000\000u\000\003\012", 0x016f},
  992|   635k|#line 887 "./uninorm/composition-table.gperf"
  993|   635k|      {"\000\"\206\000\0038", 0x2288},
  994|   635k|#line 447 "./uninorm/composition-table.gperf"
  995|   635k|      {"\000\000I\000\0030", 0x1e2c},
  996|   635k|#line 886 "./uninorm/composition-table.gperf"
  997|   635k|      {"\000\"\203\000\0038", 0x2285},
  998|   635k|#line 99 "./uninorm/composition-table.gperf"
  999|   635k|      {"\000\000d\000\003\014", 0x010f},
 1000|   635k|#line 534 "./uninorm/composition-table.gperf"
 1001|   635k|      {"\000\000w\000\003\001", 0x1e83},
 1002|   635k|#line 532 "./uninorm/composition-table.gperf"
 1003|   635k|      {"\000\000w\000\003\000", 0x1e81},
 1004|   635k|#line 514 "./uninorm/composition-table.gperf"
 1005|   635k|      {"\000\000t\000\0031", 0x1e6f},
 1006|   635k|#line 182 "./uninorm/composition-table.gperf"
 1007|   635k|      {"\000\000w\000\003\002", 0x0175},
 1008|   635k|#line 538 "./uninorm/composition-table.gperf"
 1009|   635k|      {"\000\000w\000\003\007", 0x1e87},
 1010|   635k|#line 643 "./uninorm/composition-table.gperf"
 1011|   635k|      {"\000\000y\000\003#", 0x1ef5},
 1012|   635k|#line 881 "./uninorm/composition-table.gperf"
 1013|   635k|      {"\000\"v\000\0038", 0x2278},
 1014|   635k|#line 288 "./uninorm/composition-table.gperf"
 1015|   635k|      {"\000\003\237\000\003\001", 0x038c},
 1016|   635k|#line 854 "./uninorm/composition-table.gperf"
 1017|   635k|      {"\000\003\237\000\003\000", 0x1ff8},
 1018|   635k|#line 230 "./uninorm/composition-table.gperf"
 1019|   635k|      {"\000\000g\000\003\001", 0x01f5},
 1020|   635k|#line 245 "./uninorm/composition-table.gperf"
 1021|   635k|      {"\000\000E\000\003\021", 0x0206},
 1022|   635k|#line 644 "./uninorm/composition-table.gperf"
 1023|   635k|      {"\000\000Y\000\003\011", 0x1ef6},
 1024|   635k|#line 111 "./uninorm/composition-table.gperf"
 1025|   635k|      {"\000\000g\000\003\002", 0x011d},
 1026|   635k|#line 115 "./uninorm/composition-table.gperf"
 1027|   635k|      {"\000\000g\000\003\007", 0x0121},
 1028|   635k|#line 334 "./uninorm/composition-table.gperf"
 1029|   635k|      {"\000\004\026\000\003\010", 0x04dc},
 1030|   635k|#line 893 "./uninorm/composition-table.gperf"
 1031|   635k|      {"\000\"|\000\0038", 0x22e0},
 1032|   635k|#line 427 "./uninorm/composition-table.gperf"
 1033|   635k|      {"\000\000E\000\003-", 0x1e18},
 1034|   635k|#line 498 "./uninorm/composition-table.gperf"
 1035|   635k|      {"\000\000r\000\0031", 0x1e5f},
 1036|   635k|#line 267 "./uninorm/composition-table.gperf"
 1037|   635k|      {"\000\000H\000\003\014", 0x021e},
 1038|   635k|#line 485 "./uninorm/composition-table.gperf"
 1039|   635k|      {"\000\001L\000\003\001", 0x1e52},
 1040|   635k|#line 483 "./uninorm/composition-table.gperf"
 1041|   635k|      {"\000\001L\000\003\000", 0x1e50},
 1042|   635k|#line 434 "./uninorm/composition-table.gperf"
 1043|   635k|      {"\000\000f\000\003\007", 0x1e1f},
 1044|   635k|#line 512 "./uninorm/composition-table.gperf"
 1045|   635k|      {"\000\000t\000\003#", 0x1e6d},
 1046|   635k|#line 253 "./uninorm/composition-table.gperf"
 1047|   635k|      {"\000\000O\000\003\021", 0x020e},
 1048|   635k|#line 885 "./uninorm/composition-table.gperf"
 1049|   635k|      {"\000\"\202\000\0038", 0x2284},
 1050|   635k|#line 133 "./uninorm/composition-table.gperf"
 1051|   635k|      {"\000\000L\000\003\001", 0x0139},
 1052|   635k|#line 281 "./uninorm/composition-table.gperf"
 1053|   635k|      {"\000\000Y\000\003\004", 0x0232},
 1054|   635k|#line 794 "./uninorm/composition-table.gperf"
 1055|   635k|      {"\000\037g\000\003E", 0x1fa7},
 1056|   635k|#line 476 "./uninorm/composition-table.gperf"
 1057|   635k|      {"\000\000n\000\0031", 0x1e49},
 1058|   635k|#line 272 "./uninorm/composition-table.gperf"
 1059|   635k|      {"\000\000e\000\003'", 0x0229},
 1060|   635k|#line 918 "./uninorm/composition-table.gperf"
 1061|   635k|      {"\0000r\0000\231", 0x3073},
 1062|   635k|#line 112 "./uninorm/composition-table.gperf"
 1063|   635k|      {"\000\000G\000\003\006", 0x011e},
 1064|   635k|#line 304 "./uninorm/composition-table.gperf"
 1065|   635k|      {"\000\003\322\000\003\001", 0x03d3},
 1066|   635k|#line 536 "./uninorm/composition-table.gperf"
 1067|   635k|      {"\000\000w\000\003\010", 0x1e85},
 1068|   635k|#line 430 "./uninorm/composition-table.gperf"
 1069|   635k|      {"\000\000e\000\0030", 0x1e1b},
 1070|   635k|#line 793 "./uninorm/composition-table.gperf"
 1071|   635k|      {"\000\037f\000\003E", 0x1fa6},
 1072|   635k|#line 418 "./uninorm/composition-table.gperf"
 1073|   635k|      {"\000\000d\000\0031", 0x1e0f},
 1074|   635k|#line 494 "./uninorm/composition-table.gperf"
 1075|   635k|      {"\000\000r\000\003#", 0x1e5b},
 1076|   635k|#line 409 "./uninorm/composition-table.gperf"
 1077|   635k|      {"\000\000B\000\0031", 0x1e06},
 1078|   635k|#line 275 "./uninorm/composition-table.gperf"
 1079|   635k|      {"\000\000\325\000\003\004", 0x022c},
 1080|   635k|#line 486 "./uninorm/composition-table.gperf"
 1081|   635k|      {"\000\001M\000\003\001", 0x1e53},
 1082|   635k|#line 484 "./uninorm/composition-table.gperf"
 1083|   635k|      {"\000\001M\000\003\000", 0x1e51},
 1084|   635k|#line 894 "./uninorm/composition-table.gperf"
 1085|   635k|      {"\000\"}\000\0038", 0x22e1},
 1086|   635k|#line 324 "./uninorm/composition-table.gperf"
 1087|   635k|      {"\000\004\026\000\003\006", 0x04c1},
 1088|   635k|#line 919 "./uninorm/composition-table.gperf"
 1089|   635k|      {"\0000r\0000\232", 0x3074},
 1090|   635k|#line 261 "./uninorm/composition-table.gperf"
 1091|   635k|      {"\000\000U\000\003\021", 0x0216},
 1092|   635k|#line 465 "./uninorm/composition-table.gperf"
 1093|   635k|      {"\000\000M\000\003\001", 0x1e3e},
 1094|   635k|#line 46 "./uninorm/composition-table.gperf"
 1095|   635k|      {"\000\000N\000\003\003", 0x00d1},
 1096|   635k|#line 474 "./uninorm/composition-table.gperf"
 1097|   635k|      {"\000\000n\000\003#", 0x1e47},
 1098|   635k|#line 913 "./uninorm/composition-table.gperf"
 1099|   635k|      {"\0000d\0000\231", 0x3065},
 1100|   635k|#line 467 "./uninorm/composition-table.gperf"
 1101|   635k|      {"\000\000M\000\003\007", 0x1e40},
 1102|   635k|#line 521 "./uninorm/composition-table.gperf"
 1103|   635k|      {"\000\000U\000\003-", 0x1e76},
 1104|   635k|#line 268 "./uninorm/composition-table.gperf"
 1105|   635k|      {"\000\000h\000\003\014", 0x021f},
 1106|   635k|#line 355 "./uninorm/composition-table.gperf"
 1107|   635k|      {"\000\004G\000\003\010", 0x04f5},
 1108|   635k|#line 509 "./uninorm/composition-table.gperf"
 1109|   635k|      {"\000\000T\000\003\007", 0x1e6a},
 1110|   635k|#line 315 "./uninorm/composition-table.gperf"
 1111|   635k|      {"\000\0045\000\003\000", 0x0450},
 1112|   635k|#line 416 "./uninorm/composition-table.gperf"
 1113|   635k|      {"\000\000d\000\003#", 0x1e0d},
 1114|   635k|#line 878 "./uninorm/composition-table.gperf"
 1115|   635k|      {"\000\"e\000\0038", 0x2271},
 1116|   635k|#line 407 "./uninorm/composition-table.gperf"
 1117|   635k|      {"\000\000B\000\003#", 0x1e04},
 1118|   635k|#line 255 "./uninorm/composition-table.gperf"
 1119|   635k|      {"\000\000R\000\003\017", 0x0210},
 1120|   635k|#line 835 "./uninorm/composition-table.gperf"
 1121|   635k|      {"\000\037\376\000\003\001", 0x1fde},
 1122|   635k|#line 834 "./uninorm/composition-table.gperf"
 1123|   635k|      {"\000\037\376\000\003\000", 0x1fdd},
 1124|   635k|#line 836 "./uninorm/composition-table.gperf"
 1125|   635k|      {"\000\037\376\000\003B", 0x1fdf},
 1126|   635k|#line 265 "./uninorm/composition-table.gperf"
 1127|   635k|      {"\000\000T\000\003&", 0x021a},
 1128|   635k|#line 175 "./uninorm/composition-table.gperf"
 1129|   635k|      {"\000\000U\000\003\012", 0x016e},
 1130|   635k|#line 305 "./uninorm/composition-table.gperf"
 1131|   635k|      {"\000\003\322\000\003\010", 0x03d4},
 1132|   635k|#line 301 "./uninorm/composition-table.gperf"
 1133|   635k|      {"\000\003\277\000\003\001", 0x03cc},
 1134|   635k|#line 752 "./uninorm/composition-table.gperf"
 1135|   635k|      {"\000\003\277\000\003\000", 0x1f78},
 1136|   635k|#line 714 "./uninorm/composition-table.gperf"
 1137|   635k|      {"\000\003\237\000\003\023", 0x1f48},
 1138|   635k|#line 520 "./uninorm/composition-table.gperf"
 1139|   635k|      {"\000\000u\000\0030", 0x1e75},
 1140|   635k|#line 911 "./uninorm/composition-table.gperf"
 1141|   635k|      {"\0000_\0000\231", 0x3060},
 1142|   635k|#line 113 "./uninorm/composition-table.gperf"
 1143|   635k|      {"\000\000g\000\003\006", 0x011f},
 1144|   635k|#line 297 "./uninorm/composition-table.gperf"
 1145|   635k|      {"\000\003\271\000\003\001", 0x03af},
 1146|   635k|#line 751 "./uninorm/composition-table.gperf"
 1147|   635k|      {"\000\003\271\000\003\000", 0x1f76},
 1148|   635k|#line 829 "./uninorm/composition-table.gperf"
 1149|   635k|      {"\000\003\271\000\003B", 0x1fd6},
 1150|   635k|#line 439 "./uninorm/composition-table.gperf"
 1151|   635k|      {"\000\000H\000\003#", 0x1e24},
 1152|   635k|#line 824 "./uninorm/composition-table.gperf"
 1153|   635k|      {"\000\037\277\000\003\001", 0x1fce},
 1154|   635k|#line 823 "./uninorm/composition-table.gperf"
 1155|   635k|      {"\000\037\277\000\003\000", 0x1fcd},
 1156|   635k|#line 825 "./uninorm/composition-table.gperf"
 1157|   635k|      {"\000\037\277\000\003B", 0x1fcf},
 1158|   635k|#line 908 "./uninorm/composition-table.gperf"
 1159|   635k|      {"\0000Y\0000\231", 0x305a},
 1160|   635k|#line 910 "./uninorm/composition-table.gperf"
 1161|   635k|      {"\0000]\0000\231", 0x305e},
 1162|   635k|#line 556 "./uninorm/composition-table.gperf"
 1163|   635k|      {"\000\000y\000\003\012", 0x1e99},
 1164|   635k|#line 310 "./uninorm/composition-table.gperf"
 1165|   635k|      {"\000\004\032\000\003\001", 0x040c},
 1166|   635k|#line 426 "./uninorm/composition-table.gperf"
 1167|   635k|      {"\000\001\023\000\003\001", 0x1e17},
 1168|   635k|#line 424 "./uninorm/composition-table.gperf"
 1169|   635k|      {"\000\001\023\000\003\000", 0x1e15},
 1170|   635k|#line 516 "./uninorm/composition-table.gperf"
 1171|   635k|      {"\000\000t\000\003-", 0x1e71},
 1172|   635k|#line 642 "./uninorm/composition-table.gperf"
 1173|   635k|      {"\000\000Y\000\003#", 0x1ef4},
 1174|   635k|#line 316 "./uninorm/composition-table.gperf"
 1175|   635k|      {"\000\0045\000\003\010", 0x0451},
 1176|   635k|#line 767 "./uninorm/composition-table.gperf"
 1177|   635k|      {"\000\037\014\000\003E", 0x1f8c},
 1178|   635k|#line 553 "./uninorm/composition-table.gperf"
 1179|   635k|      {"\000\000h\000\0031", 0x1e96},
 1180|   635k|#line 932 "./uninorm/composition-table.gperf"
 1181|   635k|      {"\0000\263\0000\231", 0x30b4},
 1182|   635k|#line 155 "./uninorm/composition-table.gperf"
 1183|   635k|      {"\000\000R\000\003\014", 0x0158},
 1184|   635k|#line 947 "./uninorm/composition-table.gperf"
 1185|   635k|      {"\0000\325\0000\231", 0x30d6},
 1186|   635k|#line 336 "./uninorm/composition-table.gperf"
 1187|   635k|      {"\000\004\027\000\003\010", 0x04de},
 1188|   635k|#line 258 "./uninorm/composition-table.gperf"
 1189|   635k|      {"\000\000r\000\003\021", 0x0213},
 1190|   635k|#line 296 "./uninorm/composition-table.gperf"
 1191|   635k|      {"\000\003\267\000\003\001", 0x03ae},
 1192|   635k|#line 750 "./uninorm/composition-table.gperf"
 1193|   635k|      {"\000\003\267\000\003\000", 0x1f74},
 1194|   635k|#line 818 "./uninorm/composition-table.gperf"
 1195|   635k|      {"\000\003\267\000\003B", 0x1fc6},
 1196|   635k|#line 271 "./uninorm/composition-table.gperf"
 1197|   635k|      {"\000\000E\000\003'", 0x0228},
 1198|   635k|#line 617 "./uninorm/composition-table.gperf"
 1199|   635k|      {"\000\001\241\000\003\001", 0x1edb},
 1200|   635k|#line 619 "./uninorm/composition-table.gperf"
 1201|   635k|      {"\000\001\241\000\003\000", 0x1edd},
 1202|   635k|#line 435 "./uninorm/composition-table.gperf"
 1203|   635k|      {"\000\000G\000\003\004", 0x1e20},
 1204|   635k|#line 915 "./uninorm/composition-table.gperf"
 1205|   635k|      {"\0000h\0000\231", 0x3069},
 1206|   635k|#line 429 "./uninorm/composition-table.gperf"
 1207|   635k|      {"\000\000E\000\0030", 0x1e1a},
 1208|   635k|#line 218 "./uninorm/composition-table.gperf"
 1209|   635k|      {"\000\000G\000\003\014", 0x01e6},
 1210|   635k|#line 299 "./uninorm/composition-table.gperf"
 1211|   635k|      {"\000\003\271\000\003\010", 0x03ca},
 1212|   635k|#line 948 "./uninorm/composition-table.gperf"
 1213|   635k|      {"\0000\325\0000\232", 0x30d7},
 1214|   635k|#line 816 "./uninorm/composition-table.gperf"
 1215|   635k|      {"\000\003\267\000\003E", 0x1fc3},
 1216|   635k|#line 951 "./uninorm/composition-table.gperf"
 1217|   635k|      {"\0000\333\0000\231", 0x30dc},
 1218|   635k|#line 440 "./uninorm/composition-table.gperf"
 1219|   635k|      {"\000\000h\000\003#", 0x1e25},
 1220|   635k|#line 470 "./uninorm/composition-table.gperf"
 1221|   635k|      {"\000\000m\000\003#", 0x1e43},
 1222|   635k|#line 478 "./uninorm/composition-table.gperf"
 1223|   635k|      {"\000\000n\000\003-", 0x1e4b},
 1224|   635k|#line 928 "./uninorm/composition-table.gperf"
 1225|   635k|      {"\0000\253\0000\231", 0x30ac},
 1226|   635k|#line 294 "./uninorm/composition-table.gperf"
 1227|   635k|      {"\000\003\261\000\003\001", 0x03ac},
 1228|   635k|#line 748 "./uninorm/composition-table.gperf"
 1229|   635k|      {"\000\003\261\000\003\000", 0x1f70},
 1230|   635k|#line 808 "./uninorm/composition-table.gperf"
 1231|   635k|      {"\000\003\261\000\003B", 0x1fb6},
 1232|   635k|#line 331 "./uninorm/composition-table.gperf"
 1233|   635k|      {"\000\0045\000\003\006", 0x04d7},
 1234|   635k|#line 284 "./uninorm/composition-table.gperf"
 1235|   635k|      {"\000\003\221\000\003\001", 0x0386},
 1236|   635k|#line 812 "./uninorm/composition-table.gperf"
 1237|   635k|      {"\000\003\221\000\003\000", 0x1fba},
 1238|   635k|#line 422 "./uninorm/composition-table.gperf"
 1239|   635k|      {"\000\000d\000\003-", 0x1e13},
 1240|   635k|#line 597 "./uninorm/composition-table.gperf"
 1241|   635k|      {"\000\036\271\000\003\002", 0x1ec7},
 1242|   635k|#line 770 "./uninorm/composition-table.gperf"
 1243|   635k|      {"\000\037\017\000\003E", 0x1f8f},
 1244|   635k|#line 952 "./uninorm/composition-table.gperf"
 1245|   635k|      {"\0000\333\0000\232", 0x30dd},
 1246|   635k|#line 353 "./uninorm/composition-table.gperf"
 1247|   635k|      {"\000\004C\000\003\013", 0x04f3},
 1248|   635k|#line 143 "./uninorm/composition-table.gperf"
 1249|   635k|      {"\000\000N\000\003\014", 0x0147},
 1250|   635k|#line 806 "./uninorm/composition-table.gperf"
 1251|   635k|      {"\000\003\261\000\003E", 0x1fb3},
 1252|   635k|#line 870 "./uninorm/composition-table.gperf"
 1253|   635k|      {"\000\"E\000\0038", 0x2247},
 1254|   635k|#line 708 "./uninorm/composition-table.gperf"
 1255|   635k|      {"\000\003\277\000\003\023", 0x1f40},
 1256|   635k|#line 497 "./uninorm/composition-table.gperf"
 1257|   635k|      {"\000\000R\000\0031", 0x1e5e},
 1258|   635k|#line 813 "./uninorm/composition-table.gperf"
 1259|   635k|      {"\000\003\221\000\003E", 0x1fbc},
 1260|   635k|#line 347 "./uninorm/composition-table.gperf"
 1261|   635k|      {"\000\004M\000\003\010", 0x04ed},
 1262|   635k|#line 715 "./uninorm/composition-table.gperf"
 1263|   635k|      {"\000\003\237\000\003\024", 0x1f49},
 1264|   635k|#line 158 "./uninorm/composition-table.gperf"
 1265|   635k|      {"\000\000s\000\003\001", 0x015b},
 1266|   635k|#line 692 "./uninorm/composition-table.gperf"
 1267|   635k|      {"\000\003\271\000\003\023", 0x1f30},
 1268|   635k|#line 826 "./uninorm/composition-table.gperf"
 1269|   635k|      {"\000\003\271\000\003\006", 0x1fd0},
 1270|   635k|#line 160 "./uninorm/composition-table.gperf"
 1271|   635k|      {"\000\000s\000\003\002", 0x015d},
 1272|   635k|#line 500 "./uninorm/composition-table.gperf"
 1273|   635k|      {"\000\000s\000\003\007", 0x1e61},
 1274|   635k|#line 968 "./uninorm/composition-table.gperf"
 1275|   635k|      {"\001\024\271\001\024\275", 0x114be},
 1276|   635k|#line 519 "./uninorm/composition-table.gperf"
 1277|   635k|      {"\000\000U\000\0030", 0x1e74},
 1278|   635k|#line 907 "./uninorm/composition-table.gperf"
 1279|   635k|      {"\0000W\0000\231", 0x3058},
 1280|   635k|#line 308 "./uninorm/composition-table.gperf"
 1281|   635k|      {"\000\004\023\000\003\001", 0x0403},
 1282|   635k|#line 436 "./uninorm/composition-table.gperf"
 1283|   635k|      {"\000\000g\000\003\004", 0x1e21},
 1284|   635k|#line 451 "./uninorm/composition-table.gperf"
 1285|   635k|      {"\000\000K\000\003\001", 0x1e30},
 1286|   635k|#line 761 "./uninorm/composition-table.gperf"
 1287|   635k|      {"\000\037\006\000\003E", 0x1f86},
 1288|   635k|#line 219 "./uninorm/composition-table.gperf"
 1289|   635k|      {"\000\000g\000\003\014", 0x01e7},
 1290|   635k|#line 264 "./uninorm/composition-table.gperf"
 1291|   635k|      {"\000\000s\000\003&", 0x0219},
 1292|   635k|#line 539 "./uninorm/composition-table.gperf"
 1293|   635k|      {"\000\000W\000\003#", 0x1e88},
 1294|   635k|#line 235 "./uninorm/composition-table.gperf"
 1295|   635k|      {"\000\000\306\000\003\001", 0x01fc},
 1296|   635k|#line 493 "./uninorm/composition-table.gperf"
 1297|   635k|      {"\000\000R\000\003#", 0x1e5a},
 1298|   635k|#line 571 "./uninorm/composition-table.gperf"
 1299|   635k|      {"\000\036\241\000\003\002", 0x1ead},
 1300|   635k|#line 302 "./uninorm/composition-table.gperf"
 1301|   635k|      {"\000\003\305\000\003\001", 0x03cd},
 1302|   635k|#line 753 "./uninorm/composition-table.gperf"
 1303|   635k|      {"\000\003\305\000\003\000", 0x1f7a},
 1304|   635k|#line 842 "./uninorm/composition-table.gperf"
 1305|   635k|      {"\000\003\305\000\003B", 0x1fe6},
 1306|   635k|#line 134 "./uninorm/composition-table.gperf"
 1307|   635k|      {"\000\000l\000\003\001", 0x013a},
 1308|   635k|#line 233 "./uninorm/composition-table.gperf"
 1309|   635k|      {"\000\000\305\000\003\001", 0x01fa},
 1310|   635k|#line 157 "./uninorm/composition-table.gperf"
 1311|   635k|      {"\000\000S\000\003\001", 0x015a},
 1312|   635k|#line 676 "./uninorm/composition-table.gperf"
 1313|   635k|      {"\000\003\267\000\003\023", 0x1f20},
 1314|   635k|#line 623 "./uninorm/composition-table.gperf"
 1315|   635k|      {"\000\001\241\000\003\003", 0x1ee1},
 1316|   635k|#line 159 "./uninorm/composition-table.gperf"
 1317|   635k|      {"\000\000S\000\003\002", 0x015c},
 1318|   635k|#line 499 "./uninorm/composition-table.gperf"
 1319|   635k|      {"\000\000S\000\003\007", 0x1e60},
 1320|   635k|#line 137 "./uninorm/composition-table.gperf"
 1321|   635k|      {"\000\000L\000\003\014", 0x013d},
 1322|   635k|#line 475 "./uninorm/composition-table.gperf"
 1323|   635k|      {"\000\000N\000\0031", 0x1e48},
 1324|   635k|#line 287 "./uninorm/composition-table.gperf"
 1325|   635k|      {"\000\003\231\000\003\001", 0x038a},
 1326|   635k|#line 833 "./uninorm/composition-table.gperf"
 1327|   635k|      {"\000\003\231\000\003\000", 0x1fda},
 1328|   635k|#line 503 "./uninorm/composition-table.gperf"
 1329|   635k|      {"\000\001Z\000\003\007", 0x1e64},
 1330|   635k|#line 819 "./uninorm/composition-table.gperf"
 1331|   635k|      {"\000\037\306\000\003E", 0x1fc7},
 1332|   635k|#line 186 "./uninorm/composition-table.gperf"
 1333|   635k|      {"\000\000Z\000\003\001", 0x0179},
 1334|   635k|#line 166 "./uninorm/composition-table.gperf"
 1335|   635k|      {"\000\000t\000\003'", 0x0163},
 1336|   635k|#line 263 "./uninorm/composition-table.gperf"
 1337|   635k|      {"\000\000S\000\003&", 0x0218},
 1338|   635k|#line 547 "./uninorm/composition-table.gperf"
 1339|   635k|      {"\000\000Z\000\003\002", 0x1e90},
 1340|   635k|#line 188 "./uninorm/composition-table.gperf"
 1341|   635k|      {"\000\000Z\000\003\007", 0x017b},
 1342|   635k|#line 799 "./uninorm/composition-table.gperf"
 1343|   635k|      {"\000\037l\000\003E", 0x1fac},
 1344|   635k|#line 769 "./uninorm/composition-table.gperf"
 1345|   635k|      {"\000\037\016\000\003E", 0x1f8e},
 1346|   635k|#line 91 "./uninorm/composition-table.gperf"
 1347|   635k|      {"\000\000c\000\003\001", 0x0107},
 1348|   635k|#line 648 "./uninorm/composition-table.gperf"
 1349|   635k|      {"\000\003\261\000\003\023", 0x1f00},
 1350|   635k|#line 803 "./uninorm/composition-table.gperf"
 1351|   635k|      {"\000\003\261\000\003\006", 0x1fb0},
 1352|   635k|#line 93 "./uninorm/composition-table.gperf"
 1353|   635k|      {"\000\000c\000\003\002", 0x0109},
 1354|   635k|#line 95 "./uninorm/composition-table.gperf"
 1355|   635k|      {"\000\000c\000\003\007", 0x010b},
 1356|   635k|#line 656 "./uninorm/composition-table.gperf"
 1357|   635k|      {"\000\003\221\000\003\023", 0x1f08},
 1358|   635k|#line 810 "./uninorm/composition-table.gperf"
 1359|   635k|      {"\000\003\221\000\003\006", 0x1fb8},
 1360|   635k|      {""},
 1361|   635k|#line 473 "./uninorm/composition-table.gperf"
 1362|   635k|      {"\000\000N\000\003#", 0x1e46},
 1363|   635k|#line 154 "./uninorm/composition-table.gperf"
 1364|   635k|      {"\000\000r\000\003'", 0x0157},
 1365|   635k|#line 300 "./uninorm/composition-table.gperf"
 1366|   635k|      {"\000\003\305\000\003\010", 0x03cb},
 1367|   635k|#line 187 "./uninorm/composition-table.gperf"
 1368|   635k|      {"\000\000z\000\003\001", 0x017a},
 1369|   635k|#line 167 "./uninorm/composition-table.gperf"
 1370|   635k|      {"\000\000T\000\003\014", 0x0164},
 1371|   635k|#line 413 "./uninorm/composition-table.gperf"
 1372|   635k|      {"\000\000D\000\003\007", 0x1e0a},
 1373|   635k|#line 548 "./uninorm/composition-table.gperf"
 1374|   635k|      {"\000\000z\000\003\002", 0x1e91},
 1375|   635k|#line 189 "./uninorm/composition-table.gperf"
 1376|   635k|      {"\000\000z\000\003\007", 0x017c},
 1377|   635k|      {""},
 1378|   635k|#line 709 "./uninorm/composition-table.gperf"
 1379|   635k|      {"\000\003\277\000\003\024", 0x1f41},
 1380|   635k|#line 790 "./uninorm/composition-table.gperf"
 1381|   635k|      {"\000\037c\000\003E", 0x1fa3},
 1382|   635k|#line 540 "./uninorm/composition-table.gperf"
 1383|   635k|      {"\000\000w\000\003#", 0x1e89},
 1384|   635k|#line 142 "./uninorm/composition-table.gperf"
 1385|   635k|      {"\000\000n\000\003'", 0x0146},
 1386|   635k|#line 150 "./uninorm/composition-table.gperf"
 1387|   635k|      {"\000\000o\000\003\013", 0x0151},
 1388|   635k|#line 292 "./uninorm/composition-table.gperf"
 1389|   635k|      {"\000\003\231\000\003\010", 0x03aa},
 1390|   635k|#line 693 "./uninorm/composition-table.gperf"
 1391|   635k|      {"\000\003\271\000\003\024", 0x1f31},
 1392|   635k|#line 461 "./uninorm/composition-table.gperf"
 1393|   635k|      {"\000\000L\000\0031", 0x1e3a},
 1394|   635k|      {""},
 1395|   635k|#line 631 "./uninorm/composition-table.gperf"
 1396|   635k|      {"\000\001\260\000\003\001", 0x1ee9},
 1397|   635k|#line 633 "./uninorm/composition-table.gperf"
 1398|   635k|      {"\000\001\260\000\003\000", 0x1eeb},
 1399|   635k|#line 420 "./uninorm/composition-table.gperf"
 1400|   635k|      {"\000\000d\000\003'", 0x1e11},
 1401|   635k|#line 914 "./uninorm/composition-table.gperf"
 1402|   635k|      {"\0000f\0000\231", 0x3067},
 1403|   635k|#line 178 "./uninorm/composition-table.gperf"
 1404|   635k|      {"\000\000u\000\003\013", 0x0171},
 1405|   635k|#line 827 "./uninorm/composition-table.gperf"
 1406|   635k|      {"\000\003\271\000\003\004", 0x1fd1},
 1407|   635k|#line 257 "./uninorm/composition-table.gperf"
 1408|   635k|      {"\000\000R\000\003\021", 0x0212},
 1409|   635k|#line 616 "./uninorm/composition-table.gperf"
 1410|   635k|      {"\000\001\240\000\003\001", 0x1eda},
 1411|   635k|#line 618 "./uninorm/composition-table.gperf"
 1412|   635k|      {"\000\001\240\000\003\000", 0x1edc},
 1413|   635k|#line 581 "./uninorm/composition-table.gperf"
 1414|   635k|      {"\000\036\241\000\003\006", 0x1eb7},
 1415|   635k|#line 309 "./uninorm/composition-table.gperf"
 1416|   635k|      {"\000\004\006\000\003\010", 0x0407},
 1417|   635k|#line 879 "./uninorm/composition-table.gperf"
 1418|   635k|      {"\000\"r\000\0038", 0x2274},
 1419|   635k|#line 720 "./uninorm/composition-table.gperf"
 1420|   635k|      {"\000\003\305\000\003\023", 0x1f50},
 1421|   635k|#line 837 "./uninorm/composition-table.gperf"
 1422|   635k|      {"\000\003\305\000\003\006", 0x1fe0},
 1423|   635k|#line 630 "./uninorm/composition-table.gperf"
 1424|   635k|      {"\000\001\257\000\003\001", 0x1ee8},
 1425|   635k|#line 632 "./uninorm/composition-table.gperf"
 1426|   635k|      {"\000\001\257\000\003\000", 0x1eea},
 1427|   635k|      {""},
 1428|   635k|#line 621 "./uninorm/composition-table.gperf"
 1429|   635k|      {"\000\001\241\000\003\011", 0x1edf},
 1430|   635k|#line 457 "./uninorm/composition-table.gperf"
 1431|   635k|      {"\000\000L\000\003#", 0x1e36},
 1432|   635k|#line 508 "./uninorm/composition-table.gperf"
 1433|   635k|      {"\000\036c\000\003\007", 0x1e69},
 1434|   635k|#line 677 "./uninorm/composition-table.gperf"
 1435|   635k|      {"\000\003\267\000\003\024", 0x1f21},
 1436|   635k|#line 443 "./uninorm/composition-table.gperf"
 1437|   635k|      {"\000\000H\000\003'", 0x1e28},
 1438|   635k|#line 945 "./uninorm/composition-table.gperf"
 1439|   635k|      {"\0000\322\0000\231", 0x30d3},
 1440|   635k|#line 513 "./uninorm/composition-table.gperf"
 1441|   635k|      {"\000\000T\000\0031", 0x1e6e},
 1442|   635k|#line 700 "./uninorm/composition-table.gperf"
 1443|   635k|      {"\000\003\231\000\003\023", 0x1f38},
 1444|   635k|#line 831 "./uninorm/composition-table.gperf"
 1445|   635k|      {"\000\003\231\000\003\006", 0x1fd8},
 1446|   635k|#line 847 "./uninorm/composition-table.gperf"
 1447|   635k|      {"\000\003\241\000\003\024", 0x1fec},
 1448|   635k|#line 357 "./uninorm/composition-table.gperf"
 1449|   635k|      {"\000\004K\000\003\010", 0x04f9},
 1450|   635k|#line 865 "./uninorm/composition-table.gperf"
 1451|   635k|      {"\000\"\013\000\0038", 0x220c},
 1452|   635k|#line 226 "./uninorm/composition-table.gperf"
 1453|   635k|      {"\000\001\267\000\003\014", 0x01ee},
 1454|   635k|#line 877 "./uninorm/composition-table.gperf"
 1455|   635k|      {"\000\"d\000\0038", 0x2270},
 1456|   635k|      {""},
 1457|   635k|#line 902 "./uninorm/composition-table.gperf"
 1458|   635k|      {"\0000M\0000\231", 0x304e},
 1459|   635k|#line 406 "./uninorm/composition-table.gperf"
 1460|   635k|      {"\000\000b\000\003\007", 0x1e03},
 1461|   635k|#line 776 "./uninorm/composition-table.gperf"
 1462|   635k|      {"\000\037%\000\003E", 0x1f95},
 1463|   635k|      {""},
 1464|   635k|#line 946 "./uninorm/composition-table.gperf"
 1465|   635k|      {"\0000\322\0000\232", 0x30d4},
 1466|   635k|#line 385 "./uninorm/composition-table.gperf"
 1467|   635k|      {"\000\015G\000\015>", 0x0d4b},
 1468|   635k|#line 649 "./uninorm/composition-table.gperf"
 1469|   635k|      {"\000\003\261\000\003\024", 0x1f01},
 1470|   635k|#line 469 "./uninorm/composition-table.gperf"
 1471|   635k|      {"\000\000M\000\003#", 0x1e42},
 1472|   635k|#line 295 "./uninorm/composition-table.gperf"
 1473|   635k|      {"\000\003\265\000\003\001", 0x03ad},
 1474|   635k|#line 749 "./uninorm/composition-table.gperf"
 1475|   635k|      {"\000\003\265\000\003\000", 0x1f72},
 1476|   635k|#line 657 "./uninorm/composition-table.gperf"
 1477|   635k|      {"\000\003\221\000\003\024", 0x1f09},
 1478|   635k|#line 511 "./uninorm/composition-table.gperf"
 1479|   635k|      {"\000\000T\000\003#", 0x1e6c},
 1480|   635k|#line 966 "./uninorm/composition-table.gperf"
 1481|   635k|      {"\001\024\271\001\024\272", 0x114bb},
 1482|   635k|#line 477 "./uninorm/composition-table.gperf"
 1483|   635k|      {"\000\000N\000\003-", 0x1e4a},
 1484|   635k|#line 804 "./uninorm/composition-table.gperf"
 1485|   635k|      {"\000\003\261\000\003\004", 0x1fb1},
 1486|   635k|#line 789 "./uninorm/composition-table.gperf"
 1487|   635k|      {"\000\037b\000\003E", 0x1fa2},
 1488|   635k|#line 774 "./uninorm/composition-table.gperf"
 1489|   635k|      {"\000\037#\000\003E", 0x1f93},
 1490|   635k|#line 871 "./uninorm/composition-table.gperf"
 1491|   635k|      {"\000\"H\000\0038", 0x2249},
 1492|   635k|#line 811 "./uninorm/composition-table.gperf"
 1493|   635k|      {"\000\003\221\000\003\004", 0x1fb9},
 1494|   635k|#line 149 "./uninorm/composition-table.gperf"
 1495|   635k|      {"\000\000O\000\003\013", 0x0150},
 1496|   635k|#line 452 "./uninorm/composition-table.gperf"
 1497|   635k|      {"\000\000k\000\003\001", 0x1e31},
 1498|   635k|#line 786 "./uninorm/composition-table.gperf"
 1499|   635k|      {"\000\037/\000\003E", 0x1f9f},
 1500|   635k|#line 237 "./uninorm/composition-table.gperf"
 1501|   635k|      {"\000\000\330\000\003\001", 0x01fe},
 1502|   635k|#line 444 "./uninorm/composition-table.gperf"
 1503|   635k|      {"\000\000h\000\003'", 0x1e29},
 1504|   635k|#line 938 "./uninorm/composition-table.gperf"
 1505|   635k|      {"\0000\277\0000\231", 0x30c0},
 1506|   635k|#line 570 "./uninorm/composition-table.gperf"
 1507|   635k|      {"\000\036\240\000\003\002", 0x1eac},
 1508|   635k|#line 637 "./uninorm/composition-table.gperf"
 1509|   635k|      {"\000\001\260\000\003\003", 0x1eef},
 1510|   635k|#line 291 "./uninorm/composition-table.gperf"
 1511|   635k|      {"\000\003\312\000\003\001", 0x0390},
 1512|   635k|#line 828 "./uninorm/composition-table.gperf"
 1513|   635k|      {"\000\003\312\000\003\000", 0x1fd2},
 1514|   635k|#line 830 "./uninorm/composition-table.gperf"
 1515|   635k|      {"\000\003\312\000\003B", 0x1fd7},
 1516|   635k|#line 935 "./uninorm/composition-table.gperf"
 1517|   635k|      {"\0000\271\0000\231", 0x30ba},
 1518|   635k|#line 588 "./uninorm/composition-table.gperf"
 1519|   635k|      {"\000\000\312\000\003\001", 0x1ebe},
 1520|   635k|#line 590 "./uninorm/composition-table.gperf"
 1521|   635k|      {"\000\000\312\000\003\000", 0x1ec0},
 1522|   635k|#line 622 "./uninorm/composition-table.gperf"
 1523|   635k|      {"\000\001\240\000\003\003", 0x1ee0},
 1524|   635k|#line 840 "./uninorm/composition-table.gperf"
 1525|   635k|      {"\000\003\301\000\003\023", 0x1fe4},
 1526|   635k|#line 399 "./uninorm/composition-table.gperf"
 1527|   635k|      {"\000\033<\000\0335", 0x1b3d},
 1528|   635k|#line 164 "./uninorm/composition-table.gperf"
 1529|   635k|      {"\000\000s\000\003\014", 0x0161},
 1530|   635k|#line 555 "./uninorm/composition-table.gperf"
 1531|   635k|      {"\000\000w\000\003\012", 0x1e98},
 1532|   635k|#line 798 "./uninorm/composition-table.gperf"
 1533|   635k|      {"\000\037k\000\003E", 0x1fab},
 1534|   635k|#line 898 "./uninorm/composition-table.gperf"
 1535|   635k|      {"\000\"\263\000\0038", 0x22eb},
 1536|   635k|#line 636 "./uninorm/composition-table.gperf"
 1537|   635k|      {"\000\001\257\000\003\003", 0x1eee},
 1538|   635k|#line 177 "./uninorm/composition-table.gperf"
 1539|   635k|      {"\000\000U\000\003\013", 0x0170},
 1540|   635k|#line 507 "./uninorm/composition-table.gperf"
 1541|   635k|      {"\000\036b\000\003\007", 0x1e68},
 1542|   635k|#line 721 "./uninorm/composition-table.gperf"
 1543|   635k|      {"\000\003\305\000\003\024", 0x1f51},
 1544|   635k|#line 290 "./uninorm/composition-table.gperf"
 1545|   635k|      {"\000\003\251\000\003\001", 0x038f},
 1546|   635k|#line 855 "./uninorm/composition-table.gperf"
 1547|   635k|      {"\000\003\251\000\003\000", 0x1ffa},
 1548|   635k|#line 220 "./uninorm/composition-table.gperf"
 1549|   635k|      {"\000\000K\000\003\014", 0x01e8},
 1550|   635k|#line 526 "./uninorm/composition-table.gperf"
 1551|   635k|      {"\000\001k\000\003\010", 0x1e7b},
 1552|   635k|#line 216 "./uninorm/composition-table.gperf"
 1553|   635k|      {"\000\000\306\000\003\004", 0x01e2},
 1554|   635k|#line 463 "./uninorm/composition-table.gperf"
 1555|   635k|      {"\000\000L\000\003-", 0x1e3c},
 1556|   635k|      {""},
 1557|   635k|#line 838 "./uninorm/composition-table.gperf"
 1558|   635k|      {"\000\003\305\000\003\004", 0x1fe1},
 1559|   635k|#line 394 "./uninorm/composition-table.gperf"
 1560|   635k|      {"\000\033\011\000\0335", 0x1b0a},
 1561|   635k|#line 934 "./uninorm/composition-table.gperf"
 1562|   635k|      {"\0000\267\0000\231", 0x30b8},
 1563|   635k|      {""},
 1564|   635k|#line 701 "./uninorm/composition-table.gperf"
 1565|   635k|      {"\000\003\231\000\003\024", 0x1f39},
 1566|   635k|#line 856 "./uninorm/composition-table.gperf"
 1567|   635k|      {"\000\003\251\000\003E", 0x1ffc},
 1568|   635k|#line 138 "./uninorm/composition-table.gperf"
 1569|   635k|      {"\000\000l\000\003\014", 0x013e},
 1570|   635k|#line 542 "./uninorm/composition-table.gperf"
 1571|   635k|      {"\000\000x\000\003\007", 0x1e8b},
 1572|   635k|#line 163 "./uninorm/composition-table.gperf"
 1573|   635k|      {"\000\000S\000\003\014", 0x0160},
 1574|   635k|#line 625 "./uninorm/composition-table.gperf"
 1575|   635k|      {"\000\001\241\000\003#", 0x1ee3},
 1576|   635k|#line 892 "./uninorm/composition-table.gperf"
 1577|   635k|      {"\000\"\253\000\0038", 0x22af},
 1578|   635k|#line 153 "./uninorm/composition-table.gperf"
 1579|   635k|      {"\000\000R\000\003'", 0x0156},
 1580|   635k|#line 832 "./uninorm/composition-table.gperf"
 1581|   635k|      {"\000\003\231\000\003\004", 0x1fd9},
 1582|   635k|#line 704 "./uninorm/composition-table.gperf"
 1583|   635k|      {"\000\0378\000\003\001", 0x1f3c},
 1584|   635k|#line 702 "./uninorm/composition-table.gperf"
 1585|   635k|      {"\000\0378\000\003\000", 0x1f3a},
 1586|   635k|#line 706 "./uninorm/composition-table.gperf"
 1587|   635k|      {"\000\0378\000\003B", 0x1f3e},
 1588|   635k|#line 289 "./uninorm/composition-table.gperf"
 1589|   635k|      {"\000\003\245\000\003\001", 0x038e},
 1590|   635k|#line 846 "./uninorm/composition-table.gperf"
 1591|   635k|      {"\000\003\245\000\003\000", 0x1fea},
 1592|   635k|#line 664 "./uninorm/composition-table.gperf"
 1593|   635k|      {"\000\003\265\000\003\023", 0x1f10},
 1594|   635k|#line 190 "./uninorm/composition-table.gperf"
 1595|   635k|      {"\000\000Z\000\003\014", 0x017d},
 1596|   635k|#line 931 "./uninorm/composition-table.gperf"
 1597|   635k|      {"\0000\261\0000\231", 0x30b2},
 1598|   635k|#line 674 "./uninorm/composition-table.gperf"
 1599|   635k|      {"\000\037\030\000\003\001", 0x1f1c},
 1600|   635k|#line 672 "./uninorm/composition-table.gperf"
 1601|   635k|      {"\000\037\030\000\003\000", 0x1f1a},
 1602|   635k|#line 515 "./uninorm/composition-table.gperf"
 1603|   635k|      {"\000\000T\000\003-", 0x1e70},
 1604|   635k|#line 116 "./uninorm/composition-table.gperf"
 1605|   635k|      {"\000\000G\000\003'", 0x0122},
 1606|   635k|#line 504 "./uninorm/composition-table.gperf"
 1607|   635k|      {"\000\001[\000\003\007", 0x1e65},
 1608|   635k|#line 97 "./uninorm/composition-table.gperf"
 1609|   635k|      {"\000\000c\000\003\014", 0x010d},
 1610|   635k|#line 303 "./uninorm/composition-table.gperf"
 1611|   635k|      {"\000\003\311\000\003\001", 0x03ce},
 1612|   635k|#line 754 "./uninorm/composition-table.gperf"
 1613|   635k|      {"\000\003\311\000\003\000", 0x1f7c},
 1614|   635k|#line 852 "./uninorm/composition-table.gperf"
 1615|   635k|      {"\000\003\311\000\003B", 0x1ff6},
 1616|   635k|#line 393 "./uninorm/composition-table.gperf"
 1617|   635k|      {"\000\033\007\000\0335", 0x1b08},
 1618|   635k|#line 350 "./uninorm/composition-table.gperf"
 1619|   635k|      {"\000\004#\000\003\010", 0x04f0},
 1620|   635k|#line 455 "./uninorm/composition-table.gperf"
 1621|   635k|      {"\000\000K\000\0031", 0x1e34},
 1622|   635k|#line 580 "./uninorm/composition-table.gperf"
 1623|   635k|      {"\000\036\240\000\003\006", 0x1eb6},
 1624|   635k|#line 635 "./uninorm/composition-table.gperf"
 1625|   635k|      {"\000\001\260\000\003\011", 0x1eed},
 1626|   635k|#line 98 "./uninorm/composition-table.gperf"
 1627|   635k|      {"\000\000D\000\003\014", 0x010e},
 1628|   635k|#line 544 "./uninorm/composition-table.gperf"
 1629|   635k|      {"\000\000x\000\003\010", 0x1e8d},
 1630|   635k|#line 191 "./uninorm/composition-table.gperf"
 1631|   635k|      {"\000\000z\000\003\014", 0x017e},
 1632|   635k|#line 594 "./uninorm/composition-table.gperf"
 1633|   635k|      {"\000\000\312\000\003\003", 0x1ec4},
 1634|   635k|#line 850 "./uninorm/composition-table.gperf"
 1635|   635k|      {"\000\003\311\000\003E", 0x1ff3},
 1636|   635k|#line 449 "./uninorm/composition-table.gperf"
 1637|   635k|      {"\000\000\317\000\003\001", 0x1e2e},
 1638|   635k|#line 620 "./uninorm/composition-table.gperf"
 1639|   635k|      {"\000\001\240\000\003\011", 0x1ede},
 1640|   635k|#line 502 "./uninorm/composition-table.gperf"
 1641|   635k|      {"\000\000s\000\003#", 0x1e63},
 1642|   635k|#line 462 "./uninorm/composition-table.gperf"
 1643|   635k|      {"\000\000l\000\0031", 0x1e3b},
 1644|   635k|#line 141 "./uninorm/composition-table.gperf"
 1645|   635k|      {"\000\000N\000\003'", 0x0145},
 1646|   635k|#line 901 "./uninorm/composition-table.gperf"
 1647|   635k|      {"\0000K\0000\231", 0x304c},
 1648|   635k|#line 841 "./uninorm/composition-table.gperf"
 1649|   635k|      {"\000\003\301\000\003\024", 0x1fe5},
 1650|   635k|#line 527 "./uninorm/composition-table.gperf"
 1651|   635k|      {"\000\000V\000\003\003", 0x1e7c},
 1652|   635k|#line 634 "./uninorm/composition-table.gperf"
 1653|   635k|      {"\000\001\257\000\003\011", 0x1eec},
 1654|   635k|#line 293 "./uninorm/composition-table.gperf"
 1655|   635k|      {"\000\003\245\000\003\010", 0x03ab},
 1656|   635k|#line 941 "./uninorm/composition-table.gperf"
 1657|   635k|      {"\0000\306\0000\231", 0x30c7},
 1658|   635k|#line 359 "./uninorm/composition-table.gperf"
 1659|   635k|      {"\000\006'\000\006T", 0x0623},
 1660|   635k|#line 453 "./uninorm/composition-table.gperf"
 1661|   635k|      {"\000\000K\000\003#", 0x1e32},
 1662|   635k|      {""},
 1663|   635k|#line 740 "./uninorm/composition-table.gperf"
 1664|   635k|      {"\000\003\251\000\003\023", 0x1f68},
 1665|   635k|#line 332 "./uninorm/composition-table.gperf"
 1666|   635k|      {"\000\004\330\000\003\010", 0x04da},
 1667|   635k|#line 551 "./uninorm/composition-table.gperf"
 1668|   635k|      {"\000\000Z\000\0031", 0x1e94},
 1669|   635k|#line 495 "./uninorm/composition-table.gperf"
 1670|   635k|      {"\000\036Z\000\003\004", 0x1e5c},
 1671|   635k|#line 905 "./uninorm/composition-table.gperf"
 1672|   635k|      {"\0000S\0000\231", 0x3054},
 1673|   635k|#line 320 "./uninorm/composition-table.gperf"
 1674|   635k|      {"\000\0048\000\003\000", 0x045d},
 1675|   635k|#line 312 "./uninorm/composition-table.gperf"
 1676|   635k|      {"\000\004#\000\003\006", 0x040e},
 1677|   635k|#line 606 "./uninorm/composition-table.gperf"
 1678|   635k|      {"\000\000\324\000\003\001", 0x1ed0},
 1679|   635k|#line 608 "./uninorm/composition-table.gperf"
 1680|   635k|      {"\000\000\324\000\003\000", 0x1ed2},
 1681|   635k|#line 458 "./uninorm/composition-table.gperf"
 1682|   635k|      {"\000\000l\000\003#", 0x1e37},
 1683|   635k|#line 117 "./uninorm/composition-table.gperf"
 1684|   635k|      {"\000\000g\000\003'", 0x0123},
 1685|   635k|#line 501 "./uninorm/composition-table.gperf"
 1686|   635k|      {"\000\000S\000\003#", 0x1e62},
 1687|   635k|#line 518 "./uninorm/composition-table.gperf"
 1688|   635k|      {"\000\000u\000\003$", 0x1e73},
 1689|   635k|#line 311 "./uninorm/composition-table.gperf"
 1690|   635k|      {"\000\004\030\000\003\000", 0x040d},
 1691|   635k|#line 876 "./uninorm/composition-table.gperf"
 1692|   635k|      {"\000\000>\000\0038", 0x226f},
 1693|   635k|#line 589 "./uninorm/composition-table.gperf"
 1694|   635k|      {"\000\000\352\000\003\001", 0x1ebf},
 1695|   635k|#line 591 "./uninorm/composition-table.gperf"
 1696|   635k|      {"\000\000\352\000\003\000", 0x1ec1},
 1697|   635k|      {""},
 1698|   635k|#line 417 "./uninorm/composition-table.gperf"
 1699|   635k|      {"\000\000D\000\0031", 0x1e0e},
 1700|   635k|#line 318 "./uninorm/composition-table.gperf"
 1701|   635k|      {"\000\004V\000\003\010", 0x0457},
 1702|   635k|#line 552 "./uninorm/composition-table.gperf"
 1703|   635k|      {"\000\000z\000\0031", 0x1e95},
 1704|   635k|#line 369 "./uninorm/composition-table.gperf"
 1705|   635k|      {"\000\011\307\000\011\276", 0x09cb},
 1706|   635k|#line 549 "./uninorm/composition-table.gperf"
 1707|   635k|      {"\000\000Z\000\003#", 0x1e92},
 1708|   635k|#line 280 "./uninorm/composition-table.gperf"
 1709|   635k|      {"\000\002/\000\003\004", 0x0231},
 1710|   635k|#line 844 "./uninorm/composition-table.gperf"
 1711|   635k|      {"\000\003\245\000\003\006", 0x1fe8},
 1712|   635k|#line 963 "./uninorm/composition-table.gperf"
 1713|   635k|      {"\001\0212\001\021'", 0x1112f},
 1714|   635k|#line 135 "./uninorm/composition-table.gperf"
 1715|   635k|      {"\000\000L\000\003'", 0x013b},
 1716|   635k|#line 665 "./uninorm/composition-table.gperf"
 1717|   635k|      {"\000\003\265\000\003\024", 0x1f11},
 1718|   635k|#line 362 "./uninorm/composition-table.gperf"
 1719|   635k|      {"\000\006J\000\006T", 0x0626},
 1720|   635k|#line 882 "./uninorm/composition-table.gperf"
 1721|   635k|      {"\000\"w\000\0038", 0x2279},
 1722|   635k|#line 681 "./uninorm/composition-table.gperf"
 1723|   635k|      {"\000\037!\000\003\001", 0x1f25},
 1724|   635k|#line 679 "./uninorm/composition-table.gperf"
 1725|   635k|      {"\000\037!\000\003\000", 0x1f23},
 1726|   635k|#line 683 "./uninorm/composition-table.gperf"
 1727|   635k|      {"\000\037!\000\003B", 0x1f27},
 1728|   635k|#line 372 "./uninorm/composition-table.gperf"
 1729|   635k|      {"\000\013G\000\013>", 0x0b4b},
 1730|   635k|#line 732 "./uninorm/composition-table.gperf"
 1731|   635k|      {"\000\003\311\000\003\023", 0x1f60},
 1732|   635k|#line 286 "./uninorm/composition-table.gperf"
 1733|   635k|      {"\000\003\227\000\003\001", 0x0389},
 1734|   635k|#line 821 "./uninorm/composition-table.gperf"
 1735|   635k|      {"\000\003\227\000\003\000", 0x1fca},
 1736|   635k|#line 341 "./uninorm/composition-table.gperf"
 1737|   635k|      {"\000\0048\000\003\010", 0x04e5},
 1738|   635k|#line 415 "./uninorm/composition-table.gperf"
 1739|   635k|      {"\000\000D\000\003#", 0x1e0c},
 1740|   635k|#line 959 "./uninorm/composition-table.gperf"
 1741|   635k|      {"\001\020\231\001\020\272", 0x1109a},
 1742|   635k|#line 550 "./uninorm/composition-table.gperf"
 1743|   635k|      {"\000\000z\000\003#", 0x1e93},
 1744|   635k|      {""},
 1745|   635k|#line 772 "./uninorm/composition-table.gperf"
 1746|   635k|      {"\000\037!\000\003E", 0x1f91},
 1747|   635k|#line 592 "./uninorm/composition-table.gperf"
 1748|   635k|      {"\000\000\312\000\003\011", 0x1ec2},
 1749|   635k|      {""},
 1750|   635k|#line 340 "./uninorm/composition-table.gperf"
 1751|   635k|      {"\000\004\030\000\003\010", 0x04e4},
 1752|   635k|#line 392 "./uninorm/composition-table.gperf"
 1753|   635k|      {"\000\033\005\000\0335", 0x1b06},
 1754|   635k|#line 822 "./uninorm/composition-table.gperf"
 1755|   635k|      {"\000\003\227\000\003E", 0x1fcc},
 1756|   635k|#line 343 "./uninorm/composition-table.gperf"
 1757|   635k|      {"\000\004>\000\003\010", 0x04e7},
 1758|   635k|#line 396 "./uninorm/composition-table.gperf"
 1759|   635k|      {"\000\033\015\000\0335", 0x1b0e},
 1760|   635k|#line 221 "./uninorm/composition-table.gperf"
 1761|   635k|      {"\000\000k\000\003\014", 0x01e9},
 1762|   635k|#line 165 "./uninorm/composition-table.gperf"
 1763|   635k|      {"\000\000T\000\003'", 0x0162},
 1764|   635k|#line 487 "./uninorm/composition-table.gperf"
 1765|   635k|      {"\000\000P\000\003\001", 0x1e54},
 1766|   635k|#line 401 "./uninorm/composition-table.gperf"
 1767|   635k|      {"\000\033?\000\0335", 0x1b41},
 1768|   635k|#line 969 "./uninorm/composition-table.gperf"
 1769|   635k|      {"\001\025\270\001\025\257", 0x115ba},
 1770|   635k|#line 639 "./uninorm/composition-table.gperf"
 1771|   635k|      {"\000\001\260\000\003#", 0x1ef1},
 1772|   635k|#line 489 "./uninorm/composition-table.gperf"
 1773|   635k|      {"\000\000P\000\003\007", 0x1e56},
 1774|   635k|#line 939 "./uninorm/composition-table.gperf"
 1775|   635k|      {"\0000\301\0000\231", 0x30c2},
 1776|   635k|#line 724 "./uninorm/composition-table.gperf"
 1777|   635k|      {"\000\037P\000\003\001", 0x1f54},
 1778|   635k|#line 722 "./uninorm/composition-table.gperf"
 1779|   635k|      {"\000\037P\000\003\000", 0x1f52},
 1780|   635k|#line 726 "./uninorm/composition-table.gperf"
 1781|   635k|      {"\000\037P\000\003B", 0x1f56},
 1782|   635k|      {""},
 1783|   635k|#line 624 "./uninorm/composition-table.gperf"
 1784|   635k|      {"\000\001\240\000\003#", 0x1ee2},
 1785|   635k|#line 741 "./uninorm/composition-table.gperf"
 1786|   635k|      {"\000\003\251\000\003\024", 0x1f69},
 1787|   635k|#line 410 "./uninorm/composition-table.gperf"
 1788|   635k|      {"\000\000b\000\0031", 0x1e07},
 1789|   635k|#line 612 "./uninorm/composition-table.gperf"
 1790|   635k|      {"\000\000\324\000\003\003", 0x1ed6},
 1791|   635k|#line 314 "./uninorm/composition-table.gperf"
 1792|   635k|      {"\000\0048\000\003\006", 0x0439},
 1793|   635k|#line 859 "./uninorm/composition-table.gperf"
 1794|   635k|      {"\000!\224\000\0038", 0x21ae},
 1795|   635k|#line 930 "./uninorm/composition-table.gperf"
 1796|   635k|      {"\0000\257\0000\231", 0x30b0},
 1797|   635k|#line 638 "./uninorm/composition-table.gperf"
 1798|   635k|      {"\000\001\257\000\003#", 0x1ef0},
 1799|   635k|#line 505 "./uninorm/composition-table.gperf"
 1800|   635k|      {"\000\001`\000\003\007", 0x1e66},
 1801|   635k|#line 857 "./uninorm/composition-table.gperf"
 1802|   635k|      {"\000!\220\000\0038", 0x219a},
 1803|   635k|#line 464 "./uninorm/composition-table.gperf"
 1804|   635k|      {"\000\000l\000\003-", 0x1e3d},
 1805|   635k|#line 595 "./uninorm/composition-table.gperf"
 1806|   635k|      {"\000\000\352\000\003\003", 0x1ec5},
 1807|   635k|#line 313 "./uninorm/composition-table.gperf"
 1808|   635k|      {"\000\004\030\000\003\006", 0x0419},
 1809|   635k|#line 874 "./uninorm/composition-table.gperf"
 1810|   635k|      {"\000\"M\000\0038", 0x226d},
 1811|   635k|#line 348 "./uninorm/composition-table.gperf"
 1812|   635k|      {"\000\004#\000\003\004", 0x04ee},
 1813|   635k|#line 971 "./uninorm/composition-table.gperf"
 1814|   635k|      {"\001\0315\001\0310", 0x11938},
 1815|   635k|#line 736 "./uninorm/composition-table.gperf"
 1816|   635k|      {"\000\037`\000\003\001", 0x1f64},
 1817|   635k|#line 734 "./uninorm/composition-table.gperf"
 1818|   635k|      {"\000\037`\000\003\000", 0x1f62},
 1819|   635k|#line 738 "./uninorm/composition-table.gperf"
 1820|   635k|      {"\000\037`\000\003B", 0x1f66},
 1821|   635k|#line 517 "./uninorm/composition-table.gperf"
 1822|   635k|      {"\000\000U\000\003$", 0x1e72},
 1823|   635k|#line 607 "./uninorm/composition-table.gperf"
 1824|   635k|      {"\000\000\364\000\003\001", 0x1ed1},
 1825|   635k|#line 609 "./uninorm/composition-table.gperf"
 1826|   635k|      {"\000\000\364\000\003\000", 0x1ed3},
 1827|   635k|#line 408 "./uninorm/composition-table.gperf"
 1828|   635k|      {"\000\000b\000\003#", 0x1e05},
 1829|   635k|#line 858 "./uninorm/composition-table.gperf"
 1830|   635k|      {"\000!\222\000\0038", 0x219b},
 1831|   635k|#line 728 "./uninorm/composition-table.gperf"
 1832|   635k|      {"\000\003\245\000\003\024", 0x1f59},
 1833|   635k|#line 456 "./uninorm/composition-table.gperf"
 1834|   635k|      {"\000\000k\000\0031", 0x1e35},
 1835|   635k|      {""},
 1836|   635k|#line 373 "./uninorm/composition-table.gperf"
 1837|   635k|      {"\000\013G\000\013W", 0x0b4c},
 1838|   635k|#line 787 "./uninorm/composition-table.gperf"
 1839|   635k|      {"\000\037`\000\003E", 0x1fa0},
 1840|   635k|      {""},
 1841|   635k|#line 933 "./uninorm/composition-table.gperf"
 1842|   635k|      {"\0000\265\0000\231", 0x30b6},
 1843|   635k|      {""},
 1844|   635k|#line 845 "./uninorm/composition-table.gperf"
 1845|   635k|      {"\000\003\245\000\003\004", 0x1fe9},
 1846|   635k|      {""},
 1847|   635k|#line 684 "./uninorm/composition-table.gperf"
 1848|   635k|      {"\000\003\227\000\003\023", 0x1f28},
 1849|   635k|#line 733 "./uninorm/composition-table.gperf"
 1850|   635k|      {"\000\003\311\000\003\024", 0x1f61},
 1851|   635k|#line 860 "./uninorm/composition-table.gperf"
 1852|   635k|      {"\000!\320\000\0038", 0x21cd},
 1853|   635k|#line 378 "./uninorm/composition-table.gperf"
 1854|   635k|      {"\000\014F\000\014V", 0x0c48},
 1855|   635k|      {""},
 1856|   635k|#line 421 "./uninorm/composition-table.gperf"
 1857|   635k|      {"\000\000D\000\003-", 0x1e12},
 1858|   635k|#line 949 "./uninorm/composition-table.gperf"
 1859|   635k|      {"\0000\330\0000\231", 0x30d9},
 1860|   635k|#line 285 "./uninorm/composition-table.gperf"
 1861|   635k|      {"\000\003\225\000\003\001", 0x0388},
 1862|   635k|#line 820 "./uninorm/composition-table.gperf"
 1863|   635k|      {"\000\003\225\000\003\000", 0x1fc8},
 1864|   635k|#line 563 "./uninorm/composition-table.gperf"
 1865|   635k|      {"\000\000\342\000\003\001", 0x1ea5},
 1866|   635k|#line 565 "./uninorm/composition-table.gperf"
 1867|   635k|      {"\000\000\342\000\003\000", 0x1ea7},
 1868|   635k|#line 454 "./uninorm/composition-table.gperf"
 1869|   635k|      {"\000\000k\000\003#", 0x1e33},
 1870|   635k|#line 298 "./uninorm/composition-table.gperf"
 1871|   635k|      {"\000\003\313\000\003\001", 0x03b0},
 1872|   635k|#line 839 "./uninorm/composition-table.gperf"
 1873|   635k|      {"\000\003\313\000\003\000", 0x1fe2},
 1874|   635k|#line 843 "./uninorm/composition-table.gperf"
 1875|   635k|      {"\000\003\313\000\003B", 0x1fe7},
 1876|   635k|#line 562 "./uninorm/composition-table.gperf"
 1877|   635k|      {"\000\000\302\000\003\001", 0x1ea4},
 1878|   635k|#line 564 "./uninorm/composition-table.gperf"
 1879|   635k|      {"\000\000\302\000\003\000", 0x1ea6},
 1880|   635k|#line 283 "./uninorm/composition-table.gperf"
 1881|   635k|      {"\000\000\250\000\003\001", 0x0385},
 1882|   635k|#line 848 "./uninorm/composition-table.gperf"
 1883|   635k|      {"\000\000\250\000\003\000", 0x1fed},
 1884|   635k|#line 814 "./uninorm/composition-table.gperf"
 1885|   635k|      {"\000\000\250\000\003B", 0x1fc1},
 1886|   635k|#line 950 "./uninorm/composition-table.gperf"
 1887|   635k|      {"\0000\330\0000\232", 0x30da},
 1888|   635k|#line 725 "./uninorm/composition-table.gperf"
 1889|   635k|      {"\000\037Q\000\003\001", 0x1f55},
 1890|   635k|#line 723 "./uninorm/composition-table.gperf"
 1891|   635k|      {"\000\037Q\000\003\000", 0x1f53},
 1892|   635k|#line 727 "./uninorm/composition-table.gperf"
 1893|   635k|      {"\000\037Q\000\003B", 0x1f57},
 1894|   635k|#line 193 "./uninorm/composition-table.gperf"
 1895|   635k|      {"\000\000o\000\003\033", 0x01a1},
 1896|   635k|#line 488 "./uninorm/composition-table.gperf"
 1897|   635k|      {"\000\000p\000\003\001", 0x1e55},
 1898|   635k|#line 777 "./uninorm/composition-table.gperf"
 1899|   635k|      {"\000\037&\000\003E", 0x1f96},
 1900|   635k|#line 130 "./uninorm/composition-table.gperf"
 1901|   635k|      {"\000\000j\000\003\002", 0x0135},
 1902|   635k|#line 610 "./uninorm/composition-table.gperf"
 1903|   635k|      {"\000\000\324\000\003\011", 0x1ed4},
 1904|   635k|#line 490 "./uninorm/composition-table.gperf"
 1905|   635k|      {"\000\000p\000\003\007", 0x1e57},
 1906|   635k|      {""},
 1907|   635k|#line 529 "./uninorm/composition-table.gperf"
 1908|   635k|      {"\000\000V\000\003#", 0x1e7e},
 1909|   635k|      {""},
 1910|   635k|#line 195 "./uninorm/composition-table.gperf"
 1911|   635k|      {"\000\000u\000\003\033", 0x01b0},
 1912|   635k|#line 404 "./uninorm/composition-table.gperf"
 1913|   635k|      {"\000\000a\000\003%", 0x1e01},
 1914|   635k|      {""},
 1915|   635k|#line 593 "./uninorm/composition-table.gperf"
 1916|   635k|      {"\000\000\352\000\003\011", 0x1ec3},
 1917|   635k|#line 162 "./uninorm/composition-table.gperf"
 1918|   635k|      {"\000\000s\000\003'", 0x015f},
 1919|   635k|#line 922 "./uninorm/composition-table.gperf"
 1920|   635k|      {"\0000x\0000\231", 0x3079},
 1921|   635k|      {""},
 1922|   635k|#line 339 "./uninorm/composition-table.gperf"
 1923|   635k|      {"\000\0048\000\003\004", 0x04e3},
 1924|   635k|      {""},
 1925|   635k|#line 797 "./uninorm/composition-table.gperf"
 1926|   635k|      {"\000\037j\000\003E", 0x1faa},
 1927|   635k|#line 805 "./uninorm/composition-table.gperf"
 1928|   635k|      {"\000\037p\000\003E", 0x1fb2},
 1929|   635k|#line 613 "./uninorm/composition-table.gperf"
 1930|   635k|      {"\000\000\364\000\003\003", 0x1ed7},
 1931|   635k|#line 224 "./uninorm/composition-table.gperf"
 1932|   635k|      {"\000\001\352\000\003\004", 0x01ec},
 1933|   635k|      {""},
 1934|   635k|#line 131 "./uninorm/composition-table.gperf"
 1935|   635k|      {"\000\000K\000\003'", 0x0136},
 1936|   635k|#line 338 "./uninorm/composition-table.gperf"
 1937|   635k|      {"\000\004\030\000\003\004", 0x04e2},
 1938|   635k|      {""},
 1939|   635k|#line 496 "./uninorm/composition-table.gperf"
 1940|   635k|      {"\000\036[\000\003\004", 0x1e5d},
 1941|   635k|#line 525 "./uninorm/composition-table.gperf"
 1942|   635k|      {"\000\001j\000\003\010", 0x1e7a},
 1943|   635k|#line 923 "./uninorm/composition-table.gperf"
 1944|   635k|      {"\0000x\0000\232", 0x307a},
 1945|   635k|      {""},
 1946|   635k|#line 895 "./uninorm/composition-table.gperf"
 1947|   635k|      {"\000\"\221\000\0038", 0x22e2},
 1948|   635k|      {""},
 1949|   635k|#line 398 "./uninorm/composition-table.gperf"
 1950|   635k|      {"\000\033:\000\0335", 0x1b3b},
 1951|   635k|      {""},
 1952|   635k|#line 136 "./uninorm/composition-table.gperf"
 1953|   635k|      {"\000\000l\000\003'", 0x013c},
 1954|   635k|      {""},
 1955|   635k|#line 161 "./uninorm/composition-table.gperf"
 1956|   635k|      {"\000\000S\000\003'", 0x015e},
 1957|   635k|      {""},
 1958|   635k|#line 909 "./uninorm/composition-table.gperf"
 1959|   635k|      {"\0000[\0000\231", 0x305c},
 1960|   635k|#line 685 "./uninorm/composition-table.gperf"
 1961|   635k|      {"\000\003\227\000\003\024", 0x1f29},
 1962|   635k|      {""},
 1963|   635k|#line 880 "./uninorm/composition-table.gperf"
 1964|   635k|      {"\000\"s\000\0038", 0x2275},
 1965|   635k|      {""},
 1966|   635k|#line 569 "./uninorm/composition-table.gperf"
 1967|   635k|      {"\000\000\342\000\003\003", 0x1eab},
 1968|   635k|#line 670 "./uninorm/composition-table.gperf"
 1969|   635k|      {"\000\003\225\000\003\023", 0x1f18},
 1970|   635k|#line 680 "./uninorm/composition-table.gperf"
 1971|   635k|      {"\000\037 \000\003\001", 0x1f24},
 1972|   635k|#line 678 "./uninorm/composition-table.gperf"
 1973|   635k|      {"\000\037 \000\003\000", 0x1f22},
 1974|   635k|#line 682 "./uninorm/composition-table.gperf"
 1975|   635k|      {"\000\037 \000\003B", 0x1f26},
 1976|   635k|      {""},
 1977|   635k|#line 568 "./uninorm/composition-table.gperf"
 1978|   635k|      {"\000\000\302\000\003\003", 0x1eaa},
 1979|   635k|      {""},
 1980|   635k|#line 943 "./uninorm/composition-table.gperf"
 1981|   635k|      {"\0000\317\0000\231", 0x30d0},
 1982|   635k|      {""}, {""},
 1983|   635k|#line 63 "./uninorm/composition-table.gperf"
 1984|   635k|      {"\000\000c\000\003'", 0x00e7},
 1985|   635k|#line 961 "./uninorm/composition-table.gperf"
 1986|   635k|      {"\001\020\245\001\020\272", 0x110ab},
 1987|   635k|#line 192 "./uninorm/composition-table.gperf"
 1988|   635k|      {"\000\000O\000\003\033", 0x01a0},
 1989|   635k|#line 771 "./uninorm/composition-table.gperf"
 1990|   635k|      {"\000\037 \000\003E", 0x1f90},
 1991|   635k|      {""},
 1992|   635k|#line 397 "./uninorm/composition-table.gperf"
 1993|   635k|      {"\000\033\021\000\0335", 0x1b12},
 1994|   635k|      {""}, {""},
 1995|   635k|#line 395 "./uninorm/composition-table.gperf"
 1996|   635k|      {"\000\033\013\000\0335", 0x1b0c},
 1997|   635k|#line 419 "./uninorm/composition-table.gperf"
 1998|   635k|      {"\000\000D\000\003'", 0x1e10},
 1999|   635k|      {""},
 2000|   635k|#line 944 "./uninorm/composition-table.gperf"
 2001|   635k|      {"\0000\317\0000\232", 0x30d1},
 2002|   635k|#line 402 "./uninorm/composition-table.gperf"
 2003|   635k|      {"\000\033B\000\0335", 0x1b43},
 2004|   635k|#line 445 "./uninorm/composition-table.gperf"
 2005|   635k|      {"\000\000H\000\003.", 0x1e2a},
 2006|   635k|      {""}, {""}, {""}, {""}, {""},
 2007|   635k|#line 403 "./uninorm/composition-table.gperf"
 2008|   635k|      {"\000\000A\000\003%", 0x1e00},
 2009|   635k|      {""},
 2010|   635k|#line 962 "./uninorm/composition-table.gperf"
 2011|   635k|      {"\001\0211\001\021'", 0x1112e},
 2012|   635k|#line 374 "./uninorm/composition-table.gperf"
 2013|   635k|      {"\000\013\222\000\013\327", 0x0b94},
 2014|   635k|      {""},
 2015|   635k|#line 194 "./uninorm/composition-table.gperf"
 2016|   635k|      {"\000\000U\000\003\033", 0x01af},
 2017|   635k|#line 611 "./uninorm/composition-table.gperf"
 2018|   635k|      {"\000\000\364\000\003\011", 0x1ed5},
 2019|   635k|      {""}, {""}, {""}, {""},
 2020|   635k|#line 370 "./uninorm/composition-table.gperf"
 2021|   635k|      {"\000\011\307\000\011\327", 0x09cc},
 2022|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2023|   635k|#line 883 "./uninorm/composition-table.gperf"
 2024|   635k|      {"\000\"z\000\0038", 0x2280},
 2025|   635k|      {""},
 2026|   635k|#line 379 "./uninorm/composition-table.gperf"
 2027|   635k|      {"\000\014\277\000\014\325", 0x0cc0},
 2028|   635k|      {""}, {""}, {""}, {""}, {""},
 2029|   635k|#line 446 "./uninorm/composition-table.gperf"
 2030|   635k|      {"\000\000h\000\003.", 0x1e2b},
 2031|   635k|#line 567 "./uninorm/composition-table.gperf"
 2032|   635k|      {"\000\000\342\000\003\011", 0x1ea9},
 2033|   635k|      {""}, {""}, {""}, {""},
 2034|   635k|#line 671 "./uninorm/composition-table.gperf"
 2035|   635k|      {"\000\003\225\000\003\024", 0x1f19},
 2036|   635k|#line 566 "./uninorm/composition-table.gperf"
 2037|   635k|      {"\000\000\302\000\003\011", 0x1ea8},
 2038|   635k|#line 214 "./uninorm/composition-table.gperf"
 2039|   635k|      {"\000\002&\000\003\004", 0x01e0},
 2040|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2041|   635k|      {""}, {""}, {""}, {""},
 2042|   635k|#line 387 "./uninorm/composition-table.gperf"
 2043|   635k|      {"\000\015\331\000\015\312", 0x0dda},
 2044|   635k|#line 867 "./uninorm/composition-table.gperf"
 2045|   635k|      {"\000\"%\000\0038", 0x2226},
 2046|   635k|      {""}, {""}, {""}, {""}, {""}, {""},
 2047|   635k|#line 358 "./uninorm/composition-table.gperf"
 2048|   635k|      {"\000\006'\000\006S", 0x0622},
 2049|   635k|#line 132 "./uninorm/composition-table.gperf"
 2050|   635k|      {"\000\000k\000\003'", 0x0137},
 2051|   635k|      {""},
 2052|   635k|#line 371 "./uninorm/composition-table.gperf"
 2053|   635k|      {"\000\013G\000\013V", 0x0b48},
 2054|   635k|#line 228 "./uninorm/composition-table.gperf"
 2055|   635k|      {"\000\000j\000\003\014", 0x01f0},
 2056|   635k|#line 376 "./uninorm/composition-table.gperf"
 2057|   635k|      {"\000\013\307\000\013\276", 0x0bcb},
 2058|   635k|      {""},
 2059|   635k|#line 866 "./uninorm/composition-table.gperf"
 2060|   635k|      {"\000\"#\000\0038", 0x2224},
 2061|   635k|      {""},
 2062|   635k|#line 964 "./uninorm/composition-table.gperf"
 2063|   635k|      {"\001\023G\001\023>", 0x1134b},
 2064|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2065|   635k|      {""}, {""},
 2066|   635k|#line 900 "./uninorm/composition-table.gperf"
 2067|   635k|      {"\000\"\265\000\0038", 0x22ed},
 2068|   635k|#line 360 "./uninorm/composition-table.gperf"
 2069|   635k|      {"\000\006H\000\006T", 0x0624},
 2070|   635k|      {""}, {""}, {""},
 2071|   635k|#line 389 "./uninorm/composition-table.gperf"
 2072|   635k|      {"\000\015\334\000\015\312", 0x0ddd},
 2073|   635k|      {""}, {""},
 2074|   635k|#line 381 "./uninorm/composition-table.gperf"
 2075|   635k|      {"\000\014\306\000\014\326", 0x0cc8},
 2076|   635k|#line 382 "./uninorm/composition-table.gperf"
 2077|   635k|      {"\000\014\306\000\014\302", 0x0cca},
 2078|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2079|   635k|      {""},
 2080|   635k|#line 380 "./uninorm/composition-table.gperf"
 2081|   635k|      {"\000\014\306\000\014\325", 0x0cc7},
 2082|   635k|      {""}, {""}, {""},
 2083|   635k|#line 904 "./uninorm/composition-table.gperf"
 2084|   635k|      {"\0000Q\0000\231", 0x3052},
 2085|   635k|#line 363 "./uninorm/composition-table.gperf"
 2086|   635k|      {"\000\006\325\000\006T", 0x06c0},
 2087|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2088|   635k|      {""},
 2089|   635k|#line 891 "./uninorm/composition-table.gperf"
 2090|   635k|      {"\000\"\251\000\0038", 0x22ae},
 2091|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2092|   635k|#line 965 "./uninorm/composition-table.gperf"
 2093|   635k|      {"\001\023G\001\023W", 0x1134c},
 2094|   635k|#line 967 "./uninorm/composition-table.gperf"
 2095|   635k|      {"\001\024\271\001\024\260", 0x114bc},
 2096|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2097|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2098|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2099|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2100|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2101|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2102|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2103|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2104|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2105|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2106|   635k|#line 383 "./uninorm/composition-table.gperf"
 2107|   635k|      {"\000\014\312\000\014\325", 0x0ccb},
 2108|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2109|   635k|      {""}, {""}, {""},
 2110|   635k|#line 352 "./uninorm/composition-table.gperf"
 2111|   635k|      {"\000\004#\000\003\013", 0x04f2},
 2112|   635k|      {""}, {""}, {""}, {""}, {""},
 2113|   635k|#line 365 "./uninorm/composition-table.gperf"
 2114|   635k|      {"\000\006\322\000\006T", 0x06d3},
 2115|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2116|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2117|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2118|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2119|   635k|      {""}, {""}, {""}, {""}, {""},
 2120|   635k|#line 970 "./uninorm/composition-table.gperf"
 2121|   635k|      {"\001\025\271\001\025\257", 0x115bb},
 2122|   635k|      {""}, {""}, {""},
 2123|   635k|#line 361 "./uninorm/composition-table.gperf"
 2124|   635k|      {"\000\006'\000\006U", 0x0625},
 2125|   635k|      {""}, {""}, {""}, {""}, {""},
 2126|   635k|#line 890 "./uninorm/composition-table.gperf"
 2127|   635k|      {"\000\"\250\000\0038", 0x22ad},
 2128|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2129|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2130|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2131|   635k|      {""}, {""}, {""},
 2132|   635k|#line 862 "./uninorm/composition-table.gperf"
 2133|   635k|      {"\000!\322\000\0038", 0x21cf},
 2134|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2135|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2136|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2137|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2138|   635k|      {""}, {""},
 2139|   635k|#line 375 "./uninorm/composition-table.gperf"
 2140|   635k|      {"\000\013\306\000\013\276", 0x0bca},
 2141|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2142|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2143|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2144|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2145|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2146|   635k|      {""}, {""}, {""}, {""},
 2147|   635k|#line 364 "./uninorm/composition-table.gperf"
 2148|   635k|      {"\000\006\301\000\006T", 0x06c2},
 2149|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2150|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2151|   635k|#line 391 "./uninorm/composition-table.gperf"
 2152|   635k|      {"\000\020%\000\020.", 0x1026},
 2153|   635k|      {""}, {""}, {""}, {""},
 2154|   635k|#line 400 "./uninorm/composition-table.gperf"
 2155|   635k|      {"\000\033>\000\0335", 0x1b40},
 2156|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2157|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2158|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2159|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2160|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2161|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2162|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2163|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2164|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2165|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2166|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2167|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2168|   635k|      {""}, {""},
 2169|   635k|#line 377 "./uninorm/composition-table.gperf"
 2170|   635k|      {"\000\013\306\000\013\327", 0x0bcc},
 2171|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2172|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2173|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2174|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2175|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2176|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2177|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2178|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2179|   635k|      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
 2180|   635k|      {""}, {""}, {""},
 2181|   635k|#line 861 "./uninorm/composition-table.gperf"
 2182|   635k|      {"\000!\324\000\0038", 0x21ce}
 2183|   635k|    };
 2184|       |
 2185|   635k|  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
  ------------------
  |  |    8|  1.27M|#define MAX_WORD_LENGTH 6
  ------------------
                if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
  ------------------
  |  |    7|   635k|#define MIN_WORD_LENGTH 6
  ------------------
  |  Branch (2185:7): [True: 635k, False: 0]
  |  Branch (2185:33): [True: 635k, False: 0]
  ------------------
 2186|   635k|    {
 2187|   635k|      register unsigned int key = gl_uninorm_compose_hash (str, len);
 2188|       |
 2189|   635k|      if (key <= MAX_HASH_VALUE)
  ------------------
  |  |   10|   635k|#define MAX_HASH_VALUE 1565
  ------------------
  |  Branch (2189:11): [True: 534k, False: 101k]
  ------------------
 2190|   534k|        if (len == lengthtable[key])
  ------------------
  |  Branch (2190:13): [True: 352k, False: 181k]
  ------------------
 2191|   352k|          {
 2192|   352k|            register const char *s = wordlist[key].codes;
 2193|       |
 2194|   352k|            if (*str == *s && !memcmp (str + 1, s + 1, len - 1))
  ------------------
  |  Branch (2194:17): [True: 349k, False: 3.02k]
  |  Branch (2194:31): [True: 23.0k, False: 326k]
  ------------------
 2195|  23.0k|              return &wordlist[key];
 2196|   352k|          }
 2197|   635k|    }
 2198|   612k|  return 0;
 2199|   635k|}
composition.c:gl_uninorm_compose_hash:
   23|   635k|{
   24|   635k|  static const unsigned short asso_values[] =
   25|   635k|    {
   26|   635k|         7,    1,    0,    3,   58,  132,  531,   62,    4,   33,
   27|   635k|       117,  268,  476,  135,  560,  509,  103,  265,  249,  495,
   28|   635k|        61,  124,  336,  415,  703,   75,  437,  462,  738, 1566,
   29|   635k|        48,   13,  901,  766,  322,  635,  192,  621,  846,   13,
   30|   635k|       337,   65,  103,  147,   99,  130,  255,  640,  133,  342,
   31|   635k|       172,   52, 1566,  409,  201,   34,  695,   50,  238, 1566,
   32|   635k|        16,   35,  706,  139,   63,   89,  272,    2,  588,  167,
   33|   635k|        12,  375,  289,   61,   44,  548,  431,  452,  395,  180,
   34|   635k|       794,  853,  362,  561,  456,  202,  677,  360,  195,  300,
   35|   635k|       572,  715, 1566,  301, 1566,  291,  814,   26,  634,  579,
   36|   635k|       270,   98,  423,  415,  323,   42,  862,  657,  559,  324,
   37|   635k|       262,  124,  863, 1566,  251,  538,  236,  133,   47,  406,
   38|   635k|       691,  219,  590,    5,   56,   83, 1566,    1, 1566, 1566,
   39|   635k|        65,   39, 1566, 1566,   37,   35, 1566, 1566, 1566, 1566,
   40|   635k|      1566, 1566, 1566, 1566,    4,  527,   18, 1566,    0,  849,
   41|   635k|      1566,  781, 1566,  572,   59,   73, 1566,  204, 1566,  417,
   42|   635k|       618,  511,   20, 1566, 1566,  708,  167, 1566,  855,  685,
   43|   635k|      1566,  333,   71,  136,   55,  625,  611,  523,   12,  311,
   44|   635k|        11,  649,   10,  505,   68,  482, 1566,  113, 1566,  126,
   45|   635k|         7,  476, 1566,  614,  853,    1,   41,  560,  553,  261,
   46|   635k|        93,  719,  668,  854,   10,    2,    9,  728,   31, 1566,
   47|   635k|       442, 1566,  749,  313,   12,    0,  659,    3, 1566,  329,
   48|   635k|        37, 1566, 1566, 1566,   48, 1566,  847, 1566,   43,    4,
   49|   635k|        23,    1,   24,   22,  757,    4, 1566, 1566, 1566,    3,
   50|   635k|        73,   72,   63, 1566,  824,   20,   17, 1566,    0, 1566,
   51|   635k|      1566, 1566,   77,   62,  460, 1566, 1566
   52|   635k|    };
   53|   635k|  return asso_values[(unsigned char)str[5]+1] + asso_values[(unsigned char)str[2]] + asso_values[(unsigned char)str[1]];
   54|   635k|}

uc_composition:
   31|   643k|{
   32|   643k|  if (uc1 < 0x12000 && uc2 < 0x12000)
  ------------------
  |  Branch (32:7): [True: 638k, False: 4.60k]
  |  Branch (32:24): [True: 637k, False: 1.53k]
  ------------------
   33|   637k|    {
   34|   637k|      if (uc2 >= 0x1161 && uc2 < 0x1161 + 21
  ------------------
  |  Branch (34:11): [True: 225k, False: 411k]
  |  Branch (34:28): [True: 1.55k, False: 224k]
  ------------------
   35|   637k|          && uc1 >= 0x1100 && uc1 < 0x1100 + 19)
  ------------------
  |  Branch (35:14): [True: 1.29k, False: 260]
  |  Branch (35:31): [True: 983, False: 307]
  ------------------
   36|    983|        {
   37|       |          /* Hangul: Combine single letter L and single letter V to form
   38|       |             two-letter syllable LV.  */
   39|    983|          return 0xAC00 + ((uc1 - 0x1100) * 21 + (uc2 - 0x1161)) * 28;
   40|    983|        }
   41|   636k|      else if (uc2 > 0x11A7 && uc2 < 0x11A7 + 28
  ------------------
  |  Branch (41:16): [True: 224k, False: 412k]
  |  Branch (41:32): [True: 2.12k, False: 222k]
  ------------------
   42|   636k|               && uc1 >= 0xAC00 && uc1 < 0xD7A4 && ((uc1 - 0xAC00) % 28) == 0)
  ------------------
  |  Branch (42:19): [True: 1.46k, False: 660]
  |  Branch (42:36): [True: 1.12k, False: 336]
  |  Branch (42:52): [True: 878, False: 246]
  ------------------
   43|    878|        {
   44|       |          /* Hangul: Combine two-letter syllable LV with single-letter T
   45|       |             to form three-letter syllable LVT.  */
   46|    878|          return uc1 + (uc2 - 0x11A7);
   47|    878|        }
   48|   635k|      else
   49|   635k|        {
   50|       |#if 0
   51|       |          unsigned int uc = MUL1 * uc1 * MUL2 * uc2;
   52|       |          unsigned int index1 = uc >> composition_header_0;
   53|       |          if (index1 < composition_header_1)
   54|       |            {
   55|       |              int lookup1 = u_composition.level1[index1];
   56|       |              if (lookup1 >= 0)
   57|       |                {
   58|       |                  unsigned int index2 = (uc >> composition_header_2) & composition_header_3;
   59|       |                  int lookup2 = u_composition.level2[lookup1 + index2];
   60|       |                  if (lookup2 >= 0)
   61|       |                    {
   62|       |                      unsigned int index3 = (uc & composition_header_4);
   63|       |                      unsigned int lookup3 = u_composition.level3[lookup2 + index3];
   64|       |                      if ((lookup3 >> 16) == uc2)
   65|       |                        return lookup3 & ((1U << 16) - 1);
   66|       |                    }
   67|       |                }
   68|       |            }
   69|       |#else
   70|   635k|          char codes[6];
   71|   635k|          const struct composition_rule *rule;
   72|       |
   73|   635k|          codes[0] = (uc1 >> 16) & 0xff;
   74|   635k|          codes[1] = (uc1 >> 8) & 0xff;
   75|   635k|          codes[2] = uc1 & 0xff;
   76|   635k|          codes[3] = (uc2 >> 16) & 0xff;
   77|   635k|          codes[4] = (uc2 >> 8) & 0xff;
   78|   635k|          codes[5] = uc2 & 0xff;
   79|       |
   80|   635k|          rule = gl_uninorm_compose_lookup (codes, 6);
   81|   635k|          if (rule != NULL)
  ------------------
  |  Branch (81:15): [True: 23.0k, False: 612k]
  ------------------
   82|  23.0k|            return rule->combined;
   83|   635k|#endif
   84|   635k|        }
   85|   637k|    }
   86|   618k|  return 0;
   87|   643k|}

canonical-decomposition.c:decomp_index:
   31|   822k|{
   32|   822k|  unsigned int index1 = uc >> decomp_header_0;
  ------------------
  |  |   22|   822k|#define decomp_header_0 10
  ------------------
   33|   822k|  if (index1 < decomp_header_1)
  ------------------
  |  |   23|   822k|#define decomp_header_1 191
  ------------------
  |  Branch (33:7): [True: 821k, False: 943]
  ------------------
   34|   821k|    {
   35|   821k|      int lookup1 = gl_uninorm_decomp_index_table.level1[index1];
   36|   821k|      if (lookup1 >= 0)
  ------------------
  |  Branch (36:11): [True: 736k, False: 85.6k]
  ------------------
   37|   736k|        {
   38|   736k|          unsigned int index2 = (uc >> decomp_header_2) & decomp_header_3;
  ------------------
  |  |   24|   736k|#define decomp_header_2 5
  ------------------
                        unsigned int index2 = (uc >> decomp_header_2) & decomp_header_3;
  ------------------
  |  |   25|   736k|#define decomp_header_3 31
  ------------------
   39|   736k|          int lookup2 = gl_uninorm_decomp_index_table.level2[lookup1 + index2];
   40|   736k|          if (lookup2 >= 0)
  ------------------
  |  Branch (40:15): [True: 228k, False: 507k]
  ------------------
   41|   228k|            {
   42|   228k|              unsigned int index3 = uc & decomp_header_4;
  ------------------
  |  |   26|   228k|#define decomp_header_4 31
  ------------------
   43|   228k|              return gl_uninorm_decomp_index_table.level3[lookup2 + index3];
   44|   228k|            }
   45|   736k|        }
   46|   821k|    }
   47|   593k|  return (unsigned short)(-1);
   48|   822k|}

u32_normalize:
   21|  73.7k|{
   22|  73.7k|  int (*decomposer) (ucs4_t uc, ucs4_t *decomposition) = nf->decomposer;
   23|  73.7k|  ucs4_t (*composer) (ucs4_t uc1, ucs4_t uc2) = nf->composer;
   24|       |
   25|       |  /* The result being accumulated.  */
   26|  73.7k|  UNIT *result;
  ------------------
  |  |   34|  73.7k|#define UNIT uint32_t
  ------------------
   27|  73.7k|  size_t length;
   28|  73.7k|  size_t allocated;
   29|       |  /* The buffer for sorting.  */
   30|  73.7k|  #define SORTBUF_PREALLOCATED 64
   31|  73.7k|  struct ucs4_with_ccc sortbuf_preallocated[2 * SORTBUF_PREALLOCATED];
   32|  73.7k|  struct ucs4_with_ccc *sortbuf; /* array of size 2 * sortbuf_allocated */
   33|  73.7k|  size_t sortbuf_allocated;
   34|  73.7k|  size_t sortbuf_count;
   35|       |
   36|       |  /* Initialize the accumulator.  */
   37|  73.7k|  if (resultbuf == NULL)
  ------------------
  |  Branch (37:7): [True: 73.7k, False: 0]
  ------------------
   38|  73.7k|    {
   39|  73.7k|      result = NULL;
   40|  73.7k|      allocated = 0;
   41|  73.7k|    }
   42|      0|  else
   43|      0|    {
   44|      0|      result = resultbuf;
   45|      0|      allocated = *lengthp;
   46|      0|    }
   47|  73.7k|  length = 0;
   48|       |
   49|       |  /* Initialize the buffer for sorting.  */
   50|  73.7k|  sortbuf = sortbuf_preallocated;
   51|  73.7k|  sortbuf_allocated = SORTBUF_PREALLOCATED;
  ------------------
  |  |   30|  73.7k|  #define SORTBUF_PREALLOCATED 64
  ------------------
   52|  73.7k|  sortbuf_count = 0;
   53|       |
   54|  73.7k|  {
   55|  73.7k|    const UNIT *s_end = s + n;
   56|       |
   57|  73.7k|    for (;;)
   58|   840k|      {
   59|   840k|        int count;
   60|   840k|        ucs4_t decomposed[UC_DECOMPOSITION_MAX_LENGTH];
   61|   840k|        int decomposed_count;
   62|   840k|        int i;
   63|       |
   64|   840k|        if (s < s_end)
  ------------------
  |  Branch (64:13): [True: 766k, False: 73.7k]
  ------------------
   65|   766k|          {
   66|       |            /* Fetch the next character.  */
   67|   766k|            count = U_MBTOUC_UNSAFE (&decomposed[0], s, s_end - s);
  ------------------
  |  |   35|   766k|#define U_MBTOUC_UNSAFE u32_mbtouc_unsafe
  ------------------
   68|   766k|            decomposed_count = 1;
   69|       |
   70|       |            /* Decompose it, recursively.
   71|       |               It would be possible to precompute the recursive decomposition
   72|       |               and store it in a table.  But this would significantly increase
   73|       |               the size of the decomposition tables, because for example for
   74|       |               U+1FC1 the recursive canonical decomposition and the recursive
   75|       |               compatibility decomposition are different.  */
   76|   766k|            {
   77|   766k|              int curr;
   78|       |
   79|  1.59M|              for (curr = 0; curr < decomposed_count; )
  ------------------
  |  Branch (79:30): [True: 824k, False: 766k]
  ------------------
   80|   824k|                {
   81|       |                  /* Invariant: decomposed[0..curr-1] is fully decomposed, i.e.
   82|       |                     all elements are atomic.  */
   83|   824k|                  ucs4_t curr_decomposed[UC_DECOMPOSITION_MAX_LENGTH];
   84|   824k|                  int curr_decomposed_count;
   85|       |
   86|   824k|                  curr_decomposed_count = decomposer (decomposed[curr], curr_decomposed);
   87|   824k|                  if (curr_decomposed_count >= 0)
  ------------------
  |  Branch (87:23): [True: 28.8k, False: 795k]
  ------------------
   88|  28.8k|                    {
   89|       |                      /* Move curr_decomposed[0..curr_decomposed_count-1] over
   90|       |                         decomposed[curr], making room.  It's not worth using
   91|       |                         memcpy() here, since the counts are so small.  */
   92|  28.8k|                      int shift = curr_decomposed_count - 1;
   93|       |
   94|  28.8k|                      if (shift < 0)
  ------------------
  |  Branch (94:27): [True: 0, False: 28.8k]
  ------------------
   95|      0|                        abort ();
   96|  28.8k|                      if (shift > 0)
  ------------------
  |  Branch (96:27): [True: 28.6k, False: 260]
  ------------------
   97|  28.6k|                        {
   98|  28.6k|                          int j;
   99|       |
  100|  28.6k|                          decomposed_count += shift;
  101|  28.6k|                          if (decomposed_count > UC_DECOMPOSITION_MAX_LENGTH)
  ------------------
  |  |   77|  28.6k|#define UC_DECOMPOSITION_MAX_LENGTH 32
  ------------------
  |  Branch (101:31): [True: 0, False: 28.6k]
  ------------------
  102|      0|                            abort ();
  103|  32.7k|                          for (j = decomposed_count - 1 - shift; j > curr; j--)
  ------------------
  |  Branch (103:66): [True: 4.13k, False: 28.6k]
  ------------------
  104|  4.13k|                            decomposed[j + shift] = decomposed[j];
  105|  28.6k|                        }
  106|  86.4k|                      for (; shift >= 0; shift--)
  ------------------
  |  Branch (106:30): [True: 57.5k, False: 28.8k]
  ------------------
  107|  57.5k|                        decomposed[curr + shift] = curr_decomposed[shift];
  108|  28.8k|                    }
  109|   795k|                  else
  110|   795k|                    {
  111|       |                      /* decomposed[curr] is atomic.  */
  112|   795k|                      curr++;
  113|   795k|                    }
  114|   824k|                }
  115|   766k|            }
  116|   766k|          }
  117|  73.7k|        else
  118|  73.7k|          {
  119|  73.7k|            count = 0;
  120|  73.7k|            decomposed_count = 0;
  121|  73.7k|          }
  122|       |
  123|   840k|        i = 0;
  124|   840k|        for (;;)
  125|  1.63M|          {
  126|  1.63M|            ucs4_t uc;
  127|  1.63M|            int ccc;
  128|       |
  129|  1.63M|            if (s < s_end)
  ------------------
  |  Branch (129:17): [True: 1.56M, False: 73.7k]
  ------------------
  130|  1.56M|              {
  131|       |                /* Fetch the next character from the decomposition.  */
  132|  1.56M|                if (i == decomposed_count)
  ------------------
  |  Branch (132:21): [True: 766k, False: 795k]
  ------------------
  133|   766k|                  break;
  134|   795k|                uc = decomposed[i];
  135|   795k|                ccc = uc_combining_class (uc);
  136|   795k|              }
  137|  73.7k|            else
  138|  73.7k|              {
  139|       |                /* End of string reached.  */
  140|  73.7k|                uc = 0;
  141|  73.7k|                ccc = 0;
  142|  73.7k|              }
  143|       |
  144|   869k|            if (ccc == 0)
  ------------------
  |  Branch (144:17): [True: 762k, False: 107k]
  ------------------
  145|   762k|              {
  146|   762k|                size_t j;
  147|       |
  148|       |                /* Apply the canonical ordering algorithm to the accumulated
  149|       |                   sequence of characters.  */
  150|   762k|                if (sortbuf_count > 1)
  ------------------
  |  Branch (150:21): [True: 27.0k, False: 735k]
  ------------------
  151|  27.0k|                  gl_uninorm_decompose_merge_sort_inplace (sortbuf, sortbuf_count,
  152|  27.0k|                                                           sortbuf + sortbuf_count);
  153|       |
  154|   762k|                if (composer != NULL)
  ------------------
  |  Branch (154:21): [True: 762k, False: 0]
  ------------------
  155|   762k|                  {
  156|       |                    /* Attempt to combine decomposed characters, as specified
  157|       |                       in the Unicode Standard Annex #15 "Unicode Normalization
  158|       |                       Forms".  We need to check
  159|       |                         1. whether the first accumulated character is a
  160|       |                            "starter" (i.e. has ccc = 0).  This is usually the
  161|       |                            case.  But when the string starts with a
  162|       |                            non-starter, the sortbuf also starts with a
  163|       |                            non-starter.  Btw, this check could also be
  164|       |                            omitted, because the composition table has only
  165|       |                            entries (code1, code2) for which code1 is a
  166|       |                            starter; if the first accumulated character is not
  167|       |                            a starter, no lookup will succeed.
  168|       |                         2. If the sortbuf has more than one character, check
  169|       |                            for each of these characters that are not "blocked"
  170|       |                            from the starter (i.e. have a ccc that is higher
  171|       |                            than the ccc of the previous character) whether it
  172|       |                            can be combined with the first character.
  173|       |                         3. If only one character is left in sortbuf, check
  174|       |                            whether it can be combined with the next character
  175|       |                            (also a starter).  */
  176|   762k|                    if (sortbuf_count > 0 && sortbuf[0].ccc == 0)
  ------------------
  |  Branch (176:25): [True: 691k, False: 71.1k]
  |  Branch (176:46): [True: 688k, False: 2.63k]
  ------------------
  177|   688k|                      {
  178|   779k|                        for (j = 1; j < sortbuf_count; )
  ------------------
  |  Branch (178:37): [True: 91.0k, False: 688k]
  ------------------
  179|  91.0k|                          {
  180|  91.0k|                            if (sortbuf[j].ccc > sortbuf[j - 1].ccc)
  ------------------
  |  Branch (180:33): [True: 32.6k, False: 58.4k]
  ------------------
  181|  32.6k|                              {
  182|  32.6k|                                ucs4_t combined =
  183|  32.6k|                                  composer (sortbuf[0].code, sortbuf[j].code);
  184|  32.6k|                                if (combined)
  ------------------
  |  Branch (184:37): [True: 23.0k, False: 9.57k]
  ------------------
  185|  23.0k|                                  {
  186|  23.0k|                                    size_t k;
  187|       |
  188|  23.0k|                                    sortbuf[0].code = combined;
  189|       |                                    /* sortbuf[0].ccc = 0, still valid.  */
  190|  66.7k|                                    for (k = j + 1; k < sortbuf_count; k++)
  ------------------
  |  Branch (190:53): [True: 43.7k, False: 23.0k]
  ------------------
  191|  43.7k|                                      sortbuf[k - 1] = sortbuf[k];
  192|  23.0k|                                    sortbuf_count--;
  193|  23.0k|                                    continue;
  194|  23.0k|                                  }
  195|  32.6k|                              }
  196|  68.0k|                            j++;
  197|  68.0k|                          }
  198|   688k|                        if (s < s_end && sortbuf_count == 1)
  ------------------
  |  Branch (198:29): [True: 617k, False: 71.4k]
  |  Branch (198:42): [True: 610k, False: 6.32k]
  ------------------
  199|   610k|                          {
  200|   610k|                            ucs4_t combined =
  201|   610k|                              composer (sortbuf[0].code, uc);
  202|   610k|                            if (combined)
  ------------------
  |  Branch (202:33): [True: 1.86k, False: 608k]
  ------------------
  203|  1.86k|                              {
  204|  1.86k|                                uc = combined;
  205|  1.86k|                                ccc = 0;
  206|       |                                /* uc could be further combined with subsequent
  207|       |                                   characters.  So don't put it into sortbuf[0] in
  208|       |                                   this round, only in the next round.  */
  209|  1.86k|                                sortbuf_count = 0;
  210|  1.86k|                              }
  211|   610k|                          }
  212|   688k|                      }
  213|   762k|                  }
  214|       |
  215|  1.53M|                for (j = 0; j < sortbuf_count; j++)
  ------------------
  |  Branch (215:29): [True: 770k, False: 762k]
  ------------------
  216|   770k|                  {
  217|   770k|                    ucs4_t muc = sortbuf[j].code;
  218|       |
  219|       |                    /* Append muc to the result accumulator.  */
  220|   770k|                    if (length < allocated)
  ------------------
  |  Branch (220:25): [True: 694k, False: 76.3k]
  ------------------
  221|   694k|                      {
  222|   694k|                        int ret =
  223|   694k|                          U_UCTOMB (result + length, muc, allocated - length);
  ------------------
  |  |   36|   694k|#define U_UCTOMB u32_uctomb
  ------------------
  224|   694k|                        if (ret == -1)
  ------------------
  |  Branch (224:29): [True: 0, False: 694k]
  ------------------
  225|      0|                          {
  226|      0|                            errno = EINVAL;
  227|      0|                            goto fail;
  228|      0|                          }
  229|   694k|                        if (ret >= 0)
  ------------------
  |  Branch (229:29): [True: 694k, False: 0]
  ------------------
  230|   694k|                          {
  231|   694k|                            length += ret;
  232|   694k|                            goto done_appending;
  233|   694k|                          }
  234|   694k|                      }
  235|  76.3k|                    {
  236|  76.3k|                      size_t old_allocated = allocated;
  237|  76.3k|                      size_t new_allocated = 2 * old_allocated;
  238|  76.3k|                      if (new_allocated < 64)
  ------------------
  |  Branch (238:27): [True: 73.1k, False: 3.14k]
  ------------------
  239|  73.1k|                        new_allocated = 64;
  240|  76.3k|                      if (new_allocated < old_allocated) /* integer overflow? */
  ------------------
  |  Branch (240:27): [True: 0, False: 76.3k]
  ------------------
  241|      0|                        abort ();
  242|  76.3k|                      {
  243|  76.3k|                        UNIT *larger_result;
  ------------------
  |  |   34|  76.3k|#define UNIT uint32_t
  ------------------
  244|  76.3k|                        if (result == NULL)
  ------------------
  |  Branch (244:29): [True: 73.1k, False: 3.14k]
  ------------------
  245|  73.1k|                          {
  246|  73.1k|                            larger_result =
  247|  73.1k|                              (UNIT *) malloc (new_allocated * sizeof (UNIT));
  248|  73.1k|                            if (larger_result == NULL)
  ------------------
  |  Branch (248:33): [True: 0, False: 73.1k]
  ------------------
  249|      0|                              {
  250|      0|                                errno = ENOMEM;
  251|      0|                                goto fail;
  252|      0|                              }
  253|  73.1k|                          }
  254|  3.14k|                        else if (result == resultbuf)
  ------------------
  |  Branch (254:34): [True: 0, False: 3.14k]
  ------------------
  255|      0|                          {
  256|      0|                            larger_result =
  257|      0|                              (UNIT *) malloc (new_allocated * sizeof (UNIT));
  258|      0|                            if (larger_result == NULL)
  ------------------
  |  Branch (258:33): [True: 0, False: 0]
  ------------------
  259|      0|                              {
  260|      0|                                errno = ENOMEM;
  261|      0|                                goto fail;
  262|      0|                              }
  263|      0|                            U_CPY (larger_result, resultbuf, length);
  ------------------
  |  |   37|      0|#define U_CPY u32_cpy
  ------------------
  264|      0|                          }
  265|  3.14k|                        else
  266|  3.14k|                          {
  267|  3.14k|                            larger_result =
  268|  3.14k|                              (UNIT *) realloc (result, new_allocated * sizeof (UNIT));
  269|  3.14k|                            if (larger_result == NULL)
  ------------------
  |  Branch (269:33): [True: 0, False: 3.14k]
  ------------------
  270|      0|                              {
  271|      0|                                errno = ENOMEM;
  272|      0|                                goto fail;
  273|      0|                              }
  274|  3.14k|                          }
  275|  76.3k|                        result = larger_result;
  276|  76.3k|                        allocated = new_allocated;
  277|  76.3k|                        {
  278|  76.3k|                          int ret =
  279|  76.3k|                            U_UCTOMB (result + length, muc, allocated - length);
  ------------------
  |  |   36|  76.3k|#define U_UCTOMB u32_uctomb
  ------------------
  280|  76.3k|                          if (ret == -1)
  ------------------
  |  Branch (280:31): [True: 0, False: 76.3k]
  ------------------
  281|      0|                            {
  282|      0|                              errno = EINVAL;
  283|      0|                              goto fail;
  284|      0|                            }
  285|  76.3k|                          if (ret < 0)
  ------------------
  |  Branch (285:31): [True: 0, False: 76.3k]
  ------------------
  286|      0|                            abort ();
  287|  76.3k|                          length += ret;
  288|  76.3k|                          goto done_appending;
  289|  76.3k|                        }
  290|  76.3k|                      }
  291|  76.3k|                    }
  292|   770k|                   done_appending: ;
  293|   770k|                  }
  294|       |
  295|       |                /* sortbuf is now empty.  */
  296|   762k|                sortbuf_count = 0;
  297|   762k|              }
  298|       |
  299|   869k|            if (!(s < s_end))
  ------------------
  |  Branch (299:17): [True: 73.7k, False: 795k]
  ------------------
  300|       |              /* End of string reached.  */
  301|  73.7k|              break;
  302|       |
  303|       |            /* Append (uc, ccc) to sortbuf.  */
  304|   795k|            if (sortbuf_count == sortbuf_allocated)
  ------------------
  |  Branch (304:17): [True: 762, False: 794k]
  ------------------
  305|    762|              {
  306|    762|                struct ucs4_with_ccc *new_sortbuf;
  307|       |
  308|    762|                sortbuf_allocated = 2 * sortbuf_allocated;
  309|    762|                if (sortbuf_allocated < sortbuf_count) /* integer overflow? */
  ------------------
  |  Branch (309:21): [True: 0, False: 762]
  ------------------
  310|      0|                  abort ();
  311|    762|                new_sortbuf =
  312|    762|                  (struct ucs4_with_ccc *) malloc (2 * sortbuf_allocated * sizeof (struct ucs4_with_ccc));
  313|    762|                if (new_sortbuf == NULL)
  ------------------
  |  Branch (313:21): [True: 0, False: 762]
  ------------------
  314|      0|                  {
  315|      0|                    errno = ENOMEM;
  316|      0|                    goto fail;
  317|      0|                  }
  318|    762|                memcpy (new_sortbuf, sortbuf,
  319|    762|                        sortbuf_count * sizeof (struct ucs4_with_ccc));
  320|    762|                if (sortbuf != sortbuf_preallocated)
  ------------------
  |  Branch (320:21): [True: 246, False: 516]
  ------------------
  321|    246|                  free (sortbuf);
  322|    762|                sortbuf = new_sortbuf;
  323|    762|              }
  324|   795k|            sortbuf[sortbuf_count].code = uc;
  325|   795k|            sortbuf[sortbuf_count].ccc = ccc;
  326|   795k|            sortbuf_count++;
  327|       |
  328|   795k|            i++;
  329|   795k|          }
  330|       |
  331|   840k|        if (!(s < s_end))
  ------------------
  |  Branch (331:13): [True: 73.7k, False: 766k]
  ------------------
  332|       |          /* End of string reached.  */
  333|  73.7k|          break;
  334|       |
  335|   766k|        s += count;
  336|   766k|      }
  337|  73.7k|  }
  338|       |
  339|  73.7k|  if (length == 0)
  ------------------
  |  Branch (339:7): [True: 598, False: 73.1k]
  ------------------
  340|    598|    {
  341|    598|      if (result == NULL)
  ------------------
  |  Branch (341:11): [True: 598, False: 0]
  ------------------
  342|    598|        {
  343|       |          /* Return a non-NULL value.  NULL means error.  */
  344|    598|          result = (UNIT *) malloc (1);
  345|    598|          if (result == NULL)
  ------------------
  |  Branch (345:15): [True: 0, False: 598]
  ------------------
  346|      0|            {
  347|      0|              errno = ENOMEM;
  348|      0|              goto fail;
  349|      0|            }
  350|    598|        }
  351|    598|    }
  352|  73.1k|  else if (result != resultbuf && length < allocated)
  ------------------
  |  Branch (352:12): [True: 73.1k, False: 0]
  |  Branch (352:35): [True: 72.3k, False: 877]
  ------------------
  353|  72.3k|    {
  354|       |      /* Shrink the allocated memory if possible.  */
  355|  72.3k|      UNIT *memory;
  ------------------
  |  |   34|  72.3k|#define UNIT uint32_t
  ------------------
  356|       |
  357|  72.3k|      memory = (UNIT *) realloc (result, length * sizeof (UNIT));
  358|  72.3k|      if (memory != NULL)
  ------------------
  |  Branch (358:11): [True: 72.3k, False: 0]
  ------------------
  359|  72.3k|        result = memory;
  360|  72.3k|    }
  361|       |
  362|  73.7k|  if (sortbuf_count > 0)
  ------------------
  |  Branch (362:7): [True: 0, False: 73.7k]
  ------------------
  363|      0|    abort ();
  364|  73.7k|  if (sortbuf != sortbuf_preallocated)
  ------------------
  |  Branch (364:7): [True: 516, False: 73.2k]
  ------------------
  365|    516|    free (sortbuf);
  366|       |
  367|  73.7k|  *lengthp = length;
  368|  73.7k|  return result;
  369|       |
  370|      0| fail:
  371|      0|  {
  372|      0|    int saved_errno = errno;
  373|      0|    if (sortbuf != sortbuf_preallocated)
  ------------------
  |  Branch (373:9): [True: 0, False: 0]
  ------------------
  374|      0|      free (sortbuf);
  375|      0|    if (result != resultbuf)
  ------------------
  |  Branch (375:9): [True: 0, False: 0]
  ------------------
  376|      0|      free (result);
  377|      0|    errno = saved_errno;
  378|      0|  }
  379|      0|  return NULL;
  380|  73.7k|}

u32-normalize.c:u32_mbtouc_unsafe:
  198|   766k|{
  199|   766k|  uint32_t c = *s;
  200|       |
  201|   766k|  if (c < 0xd800 || (c >= 0xe000 && c < 0x110000))
  ------------------
  |  Branch (201:7): [True: 756k, False: 10.6k]
  |  Branch (201:22): [True: 10.3k, False: 271]
  |  Branch (201:37): [True: 10.3k, False: 0]
  ------------------
  202|   766k|    *puc = c;
  203|    271|  else
  204|       |    /* invalid multibyte character */
  205|    271|    *puc = 0xfffd;
  206|   766k|  return 1;
  207|   766k|}
u32-normalize.c:u32_uctomb:
  358|   770k|{
  359|   770k|  if (uc < 0xd800 || (uc >= 0xe000 && uc < 0x110000))
  ------------------
  |  Branch (359:7): [True: 759k, False: 11.0k]
  |  Branch (359:23): [True: 11.0k, False: 0]
  |  Branch (359:39): [True: 11.0k, False: 0]
  ------------------
  360|   770k|    {
  361|   770k|      if (n > 0)
  ------------------
  |  Branch (361:11): [True: 770k, False: 0]
  ------------------
  362|   770k|        {
  363|   770k|          *s = uc;
  364|   770k|          return 1;
  365|   770k|        }
  366|      0|      else
  367|      0|        return -2;
  368|   770k|    }
  369|      0|  else
  370|      0|    return -1;
  371|   770k|}
u32-to-u8.c:u8_uctomb:
  317|   430k|{
  318|   430k|  if (uc < 0x80 && n > 0)
  ------------------
  |  Branch (318:7): [True: 256k, False: 173k]
  |  Branch (318:20): [True: 233k, False: 23.4k]
  ------------------
  319|   233k|    {
  320|   233k|      s[0] = uc;
  321|   233k|      return 1;
  322|   233k|    }
  323|   197k|  else
  324|   197k|    return u8_uctomb_aux (s, uc, n);
  325|   430k|}

u32_to_u8:
   33|  28.5k|{
   34|  28.5k|  const SRC_UNIT *s_end = s + n;
   35|       |  /* Output string accumulator.  */
   36|  28.5k|  DST_UNIT *result;
  ------------------
  |  |   25|  28.5k|#define DST_UNIT uint8_t
  ------------------
   37|  28.5k|  size_t allocated;
   38|  28.5k|  size_t length;
   39|       |
   40|  28.5k|  if (resultbuf != NULL)
  ------------------
  |  Branch (40:7): [True: 0, False: 28.5k]
  ------------------
   41|      0|    {
   42|      0|      result = resultbuf;
   43|      0|      allocated = *lengthp;
   44|      0|    }
   45|  28.5k|  else
   46|  28.5k|    {
   47|  28.5k|      result = NULL;
   48|  28.5k|      allocated = 0;
   49|  28.5k|    }
   50|  28.5k|  length = 0;
   51|       |  /* Invariants:
   52|       |     result is either == resultbuf or == NULL or malloc-allocated.
   53|       |     If length > 0, then result != NULL.  */
   54|       |
   55|   410k|  while (s < s_end)
  ------------------
  |  Branch (55:10): [True: 382k, False: 28.5k]
  ------------------
   56|   382k|    {
   57|   382k|      ucs4_t uc;
   58|   382k|      int count;
   59|       |
   60|       |      /* Fetch a Unicode character from the input string.  */
   61|   382k|      uc = *s++;
   62|       |      /* No need to call the safe variant u32_mbtouc, because
   63|       |         u8_uctomb will verify uc anyway.  */
   64|       |
   65|       |      /* Store it in the output string.  */
   66|   382k|      count = u8_uctomb (result + length, uc, allocated - length);
   67|   382k|      if (count == -1)
  ------------------
  |  Branch (67:11): [True: 0, False: 382k]
  ------------------
   68|      0|        {
   69|      0|          if (!(result == resultbuf || result == NULL))
  ------------------
  |  Branch (69:17): [True: 0, False: 0]
  |  Branch (69:40): [True: 0, False: 0]
  ------------------
   70|      0|            free (result);
   71|      0|          errno = EILSEQ;
   72|      0|          return NULL;
   73|      0|        }
   74|   382k|      if (count == -2)
  ------------------
  |  Branch (74:11): [True: 47.8k, False: 334k]
  ------------------
   75|  47.8k|        {
   76|  47.8k|          DST_UNIT *memory;
  ------------------
  |  |   25|  47.8k|#define DST_UNIT uint8_t
  ------------------
   77|       |
   78|  47.8k|          allocated = (allocated > 0 ? 2 * allocated : 12);
  ------------------
  |  Branch (78:24): [True: 19.6k, False: 28.2k]
  ------------------
   79|  47.8k|          if (length + 6 > allocated)
  ------------------
  |  Branch (79:15): [True: 0, False: 47.8k]
  ------------------
   80|      0|            allocated = length + 6;
   81|  47.8k|          if (result == resultbuf || result == NULL)
  ------------------
  |  Branch (81:15): [True: 28.2k, False: 19.6k]
  |  Branch (81:38): [True: 0, False: 19.6k]
  ------------------
   82|  28.2k|            memory = (DST_UNIT *) malloc (allocated * sizeof (DST_UNIT));
   83|  19.6k|          else
   84|  19.6k|            memory =
   85|  19.6k|              (DST_UNIT *) realloc (result, allocated * sizeof (DST_UNIT));
   86|       |
   87|  47.8k|          if (memory == NULL)
  ------------------
  |  Branch (87:15): [True: 0, False: 47.8k]
  ------------------
   88|      0|            {
   89|      0|              if (!(result == resultbuf || result == NULL))
  ------------------
  |  Branch (89:21): [True: 0, False: 0]
  |  Branch (89:44): [True: 0, False: 0]
  ------------------
   90|      0|                free (result);
   91|      0|              errno = ENOMEM;
   92|      0|              return NULL;
   93|      0|            }
   94|  47.8k|          if (result == resultbuf && length > 0)
  ------------------
  |  Branch (94:15): [True: 28.2k, False: 19.6k]
  |  Branch (94:38): [True: 0, False: 28.2k]
  ------------------
   95|      0|            memcpy ((char *) memory, (char *) result,
   96|      0|                    length * sizeof (DST_UNIT));
   97|  47.8k|          result = memory;
   98|  47.8k|          count = u8_uctomb (result + length, uc, allocated - length);
   99|  47.8k|          if (count < 0)
  ------------------
  |  Branch (99:15): [True: 0, False: 47.8k]
  ------------------
  100|      0|            abort ();
  101|  47.8k|        }
  102|   382k|      length += count;
  103|   382k|    }
  104|       |
  105|  28.5k|  if (length == 0)
  ------------------
  |  Branch (105:7): [True: 244, False: 28.2k]
  ------------------
  106|    244|    {
  107|    244|      if (result == NULL)
  ------------------
  |  Branch (107:11): [True: 244, False: 0]
  ------------------
  108|    244|        {
  109|       |          /* Return a non-NULL value.  NULL means error.  */
  110|    244|          result = (DST_UNIT *) malloc (1);
  111|    244|          if (result == NULL)
  ------------------
  |  Branch (111:15): [True: 0, False: 244]
  ------------------
  112|      0|            {
  113|      0|              errno = ENOMEM;
  114|      0|              return NULL;
  115|      0|            }
  116|    244|        }
  117|    244|    }
  118|  28.2k|  else if (result != resultbuf && length < allocated)
  ------------------
  |  Branch (118:12): [True: 28.2k, False: 0]
  |  Branch (118:35): [True: 27.4k, False: 821]
  ------------------
  119|  27.4k|    {
  120|       |      /* Shrink the allocated memory if possible.  */
  121|  27.4k|      DST_UNIT *memory;
  ------------------
  |  |   25|  27.4k|#define DST_UNIT uint8_t
  ------------------
  122|       |
  123|  27.4k|      memory = (DST_UNIT *) realloc (result, length * sizeof (DST_UNIT));
  124|  27.4k|      if (memory != NULL)
  ------------------
  |  Branch (124:11): [True: 27.4k, False: 0]
  ------------------
  125|  27.4k|        result = memory;
  126|  27.4k|    }
  127|       |
  128|  28.5k|  *lengthp = length;
  129|  28.5k|  return result;
  130|  28.5k|}

u8_mbtoucr:
   25|   546k|{
   26|   546k|  uint8_t c = *s;
   27|       |
   28|   546k|  if (c < 0x80)
  ------------------
  |  Branch (28:7): [True: 255k, False: 290k]
  ------------------
   29|   255k|    {
   30|   255k|      *puc = c;
   31|   255k|      return 1;
   32|   255k|    }
   33|   290k|  else if (c >= 0xc2)
  ------------------
  |  Branch (33:12): [True: 286k, False: 3.94k]
  ------------------
   34|   286k|    {
   35|   286k|      if (c < 0xe0)
  ------------------
  |  Branch (35:11): [True: 119k, False: 167k]
  ------------------
   36|   119k|        {
   37|   119k|          if (n >= 2)
  ------------------
  |  Branch (37:15): [True: 119k, False: 0]
  ------------------
   38|   119k|            {
   39|   119k|              if ((s[1] ^ 0x80) < 0x40)
  ------------------
  |  Branch (39:19): [True: 115k, False: 3.53k]
  ------------------
   40|   115k|                {
   41|   115k|                  *puc = ((unsigned int) (c & 0x1f) << 6)
   42|   115k|                         | (unsigned int) (s[1] ^ 0x80);
   43|   115k|                  return 2;
   44|   115k|                }
   45|       |              /* invalid multibyte character */
   46|   119k|            }
   47|      0|          else
   48|      0|            {
   49|       |              /* incomplete multibyte character */
   50|      0|              *puc = 0xfffd;
   51|      0|              return -2;
   52|      0|            }
   53|   119k|        }
   54|   167k|      else if (c < 0xf0)
  ------------------
  |  Branch (54:16): [True: 156k, False: 10.5k]
  ------------------
   55|   156k|        {
   56|   156k|          if (n >= 2)
  ------------------
  |  Branch (56:15): [True: 156k, False: 0]
  ------------------
   57|   156k|            {
   58|   156k|              if ((s[1] ^ 0x80) < 0x40
  ------------------
  |  Branch (58:19): [True: 155k, False: 888]
  ------------------
   59|   156k|                  && (c >= 0xe1 || s[1] >= 0xa0)
  ------------------
  |  Branch (59:23): [True: 154k, False: 1.23k]
  |  Branch (59:36): [True: 1.01k, False: 222]
  ------------------
   60|   156k|                  && (c != 0xed || s[1] < 0xa0))
  ------------------
  |  Branch (60:23): [True: 155k, False: 573]
  |  Branch (60:36): [True: 367, False: 206]
  ------------------
   61|   155k|                {
   62|   155k|                  if (n >= 3)
  ------------------
  |  Branch (62:23): [True: 155k, False: 0]
  ------------------
   63|   155k|                    {
   64|   155k|                      if ((s[2] ^ 0x80) < 0x40)
  ------------------
  |  Branch (64:27): [True: 155k, False: 256]
  ------------------
   65|   155k|                        {
   66|   155k|                          *puc = ((unsigned int) (c & 0x0f) << 12)
   67|   155k|                                 | ((unsigned int) (s[1] ^ 0x80) << 6)
   68|   155k|                                 | (unsigned int) (s[2] ^ 0x80);
   69|   155k|                          return 3;
   70|   155k|                        }
   71|       |                      /* invalid multibyte character */
   72|   155k|                    }
   73|      0|                  else
   74|      0|                    {
   75|       |                      /* incomplete multibyte character */
   76|      0|                      *puc = 0xfffd;
   77|      0|                      return -2;
   78|      0|                    }
   79|   155k|                }
   80|       |              /* invalid multibyte character */
   81|   156k|            }
   82|      0|          else
   83|      0|            {
   84|       |              /* incomplete multibyte character */
   85|      0|              *puc = 0xfffd;
   86|      0|              return -2;
   87|      0|            }
   88|   156k|        }
   89|  10.5k|      else if (c < 0xf8)
  ------------------
  |  Branch (89:16): [True: 9.33k, False: 1.17k]
  ------------------
   90|  9.33k|        {
   91|  9.33k|          if (n >= 2)
  ------------------
  |  Branch (91:15): [True: 9.33k, False: 0]
  ------------------
   92|  9.33k|            {
   93|  9.33k|              if ((s[1] ^ 0x80) < 0x40
  ------------------
  |  Branch (93:19): [True: 7.60k, False: 1.73k]
  ------------------
   94|  9.33k|                  && (c >= 0xf1 || s[1] >= 0x90)
  ------------------
  |  Branch (94:23): [True: 706, False: 6.89k]
  |  Branch (94:36): [True: 6.66k, False: 236]
  ------------------
   95|  9.33k|                  && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90)))
  ------------------
  |  Branch (95:23): [True: 6.70k, False: 662]
  |  Branch (95:36): [True: 450, False: 212]
  |  Branch (95:49): [True: 242, False: 208]
  ------------------
   96|  6.94k|                {
   97|  6.94k|                  if (n >= 3)
  ------------------
  |  Branch (97:23): [True: 6.94k, False: 0]
  ------------------
   98|  6.94k|                    {
   99|  6.94k|                      if ((s[2] ^ 0x80) < 0x40)
  ------------------
  |  Branch (99:27): [True: 6.66k, False: 280]
  ------------------
  100|  6.66k|                        {
  101|  6.66k|                          if (n >= 4)
  ------------------
  |  Branch (101:31): [True: 6.66k, False: 0]
  ------------------
  102|  6.66k|                            {
  103|  6.66k|                              if ((s[3] ^ 0x80) < 0x40)
  ------------------
  |  Branch (103:35): [True: 6.17k, False: 498]
  ------------------
  104|  6.17k|                                {
  105|  6.17k|                                  *puc = ((unsigned int) (c & 0x07) << 18)
  106|  6.17k|                                         | ((unsigned int) (s[1] ^ 0x80) << 12)
  107|  6.17k|                                         | ((unsigned int) (s[2] ^ 0x80) << 6)
  108|  6.17k|                                         | (unsigned int) (s[3] ^ 0x80);
  109|  6.17k|                                  return 4;
  110|  6.17k|                                }
  111|       |                              /* invalid multibyte character */
  112|  6.66k|                            }
  113|      0|                          else
  114|      0|                            {
  115|       |                              /* incomplete multibyte character */
  116|      0|                              *puc = 0xfffd;
  117|      0|                              return -2;
  118|      0|                            }
  119|  6.66k|                        }
  120|       |                      /* invalid multibyte character */
  121|  6.94k|                    }
  122|      0|                  else
  123|      0|                    {
  124|       |                      /* incomplete multibyte character */
  125|      0|                      *puc = 0xfffd;
  126|      0|                      return -2;
  127|      0|                    }
  128|  6.94k|                }
  129|       |              /* invalid multibyte character */
  130|  9.33k|            }
  131|      0|          else
  132|      0|            {
  133|       |              /* incomplete multibyte character */
  134|      0|              *puc = 0xfffd;
  135|      0|              return -2;
  136|      0|            }
  137|  9.33k|        }
  138|   286k|    }
  139|       |  /* invalid multibyte character */
  140|  13.3k|  *puc = 0xfffd;
  141|  13.3k|  return -1;
  142|   546k|}

u8_to_u32:
   33|  65.6k|{
   34|  65.6k|  const SRC_UNIT *s_end = s + n;
   35|       |  /* Output string accumulator.  */
   36|  65.6k|  DST_UNIT *result;
  ------------------
  |  |   25|  65.6k|#define DST_UNIT uint32_t
  ------------------
   37|  65.6k|  size_t allocated;
   38|  65.6k|  size_t length;
   39|       |
   40|  65.6k|  if (resultbuf != NULL)
  ------------------
  |  Branch (40:7): [True: 0, False: 65.6k]
  ------------------
   41|      0|    {
   42|      0|      result = resultbuf;
   43|      0|      allocated = *lengthp;
   44|      0|    }
   45|  65.6k|  else
   46|  65.6k|    {
   47|  65.6k|      result = NULL;
   48|  65.6k|      allocated = 0;
   49|  65.6k|    }
   50|  65.6k|  length = 0;
   51|       |  /* Invariants:
   52|       |     result is either == resultbuf or == NULL or malloc-allocated.
   53|       |     If length > 0, then result != NULL.  */
   54|       |
   55|   598k|  while (s < s_end)
  ------------------
  |  Branch (55:10): [True: 546k, False: 52.2k]
  ------------------
   56|   546k|    {
   57|   546k|      ucs4_t uc;
   58|   546k|      int count;
   59|       |
   60|       |      /* Fetch a Unicode character from the input string.  */
   61|   546k|      count = u8_mbtoucr (&uc, s, s_end - s);
   62|   546k|      if (count < 0)
  ------------------
  |  Branch (62:11): [True: 13.3k, False: 532k]
  ------------------
   63|  13.3k|        {
   64|  13.3k|          if (!(result == resultbuf || result == NULL))
  ------------------
  |  Branch (64:17): [True: 11.2k, False: 2.15k]
  |  Branch (64:40): [True: 0, False: 2.15k]
  ------------------
   65|  2.15k|            free (result);
   66|  13.3k|          errno = EILSEQ;
   67|  13.3k|          return NULL;
   68|  13.3k|        }
   69|   532k|      s += count;
   70|       |
   71|       |      /* Store it in the output string.  */
   72|   532k|      if (length + 1 > allocated)
  ------------------
  |  Branch (72:11): [True: 71.9k, False: 460k]
  ------------------
   73|  71.9k|        {
   74|  71.9k|          DST_UNIT *memory;
  ------------------
  |  |   25|  71.9k|#define DST_UNIT uint32_t
  ------------------
   75|       |
   76|  71.9k|          allocated = (allocated > 0 ? 2 * allocated : 12);
  ------------------
  |  Branch (76:24): [True: 17.5k, False: 54.3k]
  ------------------
   77|  71.9k|          if (length + 1 > allocated)
  ------------------
  |  Branch (77:15): [True: 0, False: 71.9k]
  ------------------
   78|      0|            allocated = length + 1;
   79|  71.9k|          if (result == resultbuf || result == NULL)
  ------------------
  |  Branch (79:15): [True: 54.3k, False: 17.5k]
  |  Branch (79:38): [True: 0, False: 17.5k]
  ------------------
   80|  54.3k|            memory = (DST_UNIT *) malloc (allocated * sizeof (DST_UNIT));
   81|  17.5k|          else
   82|  17.5k|            memory =
   83|  17.5k|              (DST_UNIT *) realloc (result, allocated * sizeof (DST_UNIT));
   84|       |
   85|  71.9k|          if (memory == NULL)
  ------------------
  |  Branch (85:15): [True: 0, False: 71.9k]
  ------------------
   86|      0|            {
   87|      0|              if (!(result == resultbuf || result == NULL))
  ------------------
  |  Branch (87:21): [True: 0, False: 0]
  |  Branch (87:44): [True: 0, False: 0]
  ------------------
   88|      0|                free (result);
   89|      0|              errno = ENOMEM;
   90|      0|              return NULL;
   91|      0|            }
   92|  71.9k|          if (result == resultbuf && length > 0)
  ------------------
  |  Branch (92:15): [True: 54.3k, False: 17.5k]
  |  Branch (92:38): [True: 0, False: 54.3k]
  ------------------
   93|      0|            memcpy ((char *) memory, (char *) result,
   94|      0|                    length * sizeof (DST_UNIT));
   95|  71.9k|          result = memory;
   96|  71.9k|        }
   97|   532k|      result[length++] = uc;
   98|   532k|    }
   99|       |
  100|  52.2k|  if (length == 0)
  ------------------
  |  Branch (100:7): [True: 0, False: 52.2k]
  ------------------
  101|      0|    {
  102|      0|      if (result == NULL)
  ------------------
  |  Branch (102:11): [True: 0, False: 0]
  ------------------
  103|      0|        {
  104|       |          /* Return a non-NULL value.  NULL means error.  */
  105|      0|          result = (DST_UNIT *) malloc (1);
  106|      0|          if (result == NULL)
  ------------------
  |  Branch (106:15): [True: 0, False: 0]
  ------------------
  107|      0|            {
  108|      0|              errno = ENOMEM;
  109|      0|              return NULL;
  110|      0|            }
  111|      0|        }
  112|      0|    }
  113|  52.2k|  else if (result != resultbuf && length < allocated)
  ------------------
  |  Branch (113:12): [True: 52.2k, False: 0]
  |  Branch (113:35): [True: 51.1k, False: 1.11k]
  ------------------
  114|  51.1k|    {
  115|       |      /* Shrink the allocated memory if possible.  */
  116|  51.1k|      DST_UNIT *memory;
  ------------------
  |  |   25|  51.1k|#define DST_UNIT uint32_t
  ------------------
  117|       |
  118|  51.1k|      memory = (DST_UNIT *) realloc (result, length * sizeof (DST_UNIT));
  119|  51.1k|      if (memory != NULL)
  ------------------
  |  Branch (119:11): [True: 51.1k, False: 0]
  ------------------
  120|  51.1k|        result = memory;
  121|  51.1k|    }
  122|       |
  123|  52.2k|  *lengthp = length;
  124|  52.2k|  return result;
  125|  52.2k|}

u8_uctomb_aux:
   27|   197k|{
   28|   197k|  int count;
   29|       |
   30|   197k|  if (uc < 0x80)
  ------------------
  |  Branch (30:7): [True: 23.4k, False: 173k]
  ------------------
   31|       |    /* The case n >= 1 is already handled by the caller.  */
   32|  23.4k|    return -2;
   33|   173k|  else if (uc < 0x800)
  ------------------
  |  Branch (33:12): [True: 62.8k, False: 110k]
  ------------------
   34|  62.8k|    count = 2;
   35|   110k|  else if (uc < 0x10000)
  ------------------
  |  Branch (35:12): [True: 105k, False: 5.04k]
  ------------------
   36|   105k|    {
   37|   105k|      if (uc < 0xd800 || uc >= 0xe000)
  ------------------
  |  Branch (37:11): [True: 105k, False: 464]
  |  Branch (37:26): [True: 464, False: 0]
  ------------------
   38|   105k|        count = 3;
   39|      0|      else
   40|      0|        return -1;
   41|   105k|    }
   42|  5.04k|  else if (uc < 0x110000)
  ------------------
  |  Branch (42:12): [True: 5.04k, False: 0]
  ------------------
   43|  5.04k|    count = 4;
   44|      0|  else
   45|      0|    return -1;
   46|       |
   47|   173k|  if (n < count)
  ------------------
  |  Branch (47:7): [True: 24.4k, False: 149k]
  ------------------
   48|  24.4k|    return -2;
   49|       |
   50|   149k|  switch (count) /* note: code falls through cases! */
  ------------------
  |  Branch (50:11): [True: 0, False: 149k]
  ------------------
   51|   149k|    {
   52|  3.49k|    case 4: s[3] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x10000;
  ------------------
  |  Branch (52:5): [True: 3.49k, False: 145k]
  ------------------
   53|  3.49k|      FALLTHROUGH;
  ------------------
  |  |  150|  3.49k|#define FALLTHROUGH _GL_ATTRIBUTE_FALLTHROUGH
  |  |  ------------------
  |  |  |  | 2454|  3.49k|#  define _GL_ATTRIBUTE_FALLTHROUGH __attribute__ ((__fallthrough__))
  |  |  ------------------
  ------------------
   54|  97.0k|    case 3: s[2] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x800;
  ------------------
  |  Branch (54:5): [True: 93.5k, False: 55.7k]
  ------------------
   55|  97.0k|      FALLTHROUGH;
  ------------------
  |  |  150|  97.0k|#define FALLTHROUGH _GL_ATTRIBUTE_FALLTHROUGH
  |  |  ------------------
  |  |  |  | 2454|  97.0k|#  define _GL_ATTRIBUTE_FALLTHROUGH __attribute__ ((__fallthrough__))
  |  |  ------------------
  ------------------
   56|   149k|    case 2: s[1] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0xc0;
  ------------------
  |  Branch (56:5): [True: 52.2k, False: 97.0k]
  ------------------
   57|   149k|  /*case 1:*/ s[0] = uc;
   58|   149k|    }
   59|   149k|  return count;
   60|   149k|}

_idn2_bidi:
   57|  9.46k|{
   58|  9.46k|  int bc;
   59|  9.46k|  int endok = 1;
   60|       |
   61|  9.46k|  if (!_isBidi (label, llen))
  ------------------
  |  Branch (61:7): [True: 5.42k, False: 4.04k]
  ------------------
   62|  5.42k|    return IDN2_OK;
   63|       |
   64|       |  // 2.1
   65|  4.04k|  switch ((bc = uc_bidi_category (*label)))
   66|  4.04k|    {
   67|    791|    case UC_BIDI_L:
  ------------------
  |  Branch (67:5): [True: 791, False: 3.25k]
  ------------------
   68|       |      // check 2.5 & 2.6
   69|  5.51k|      for (size_t it = 1; it < llen; it++)
  ------------------
  |  Branch (69:27): [True: 5.51k, False: 0]
  ------------------
   70|  5.51k|	{
   71|  5.51k|	  bc = uc_bidi_category (label[it]);
   72|       |
   73|  5.51k|	  if (bc == UC_BIDI_L || bc == UC_BIDI_EN || bc == UC_BIDI_NSM)
  ------------------
  |  Branch (73:8): [True: 3.18k, False: 2.32k]
  |  Branch (73:27): [True: 364, False: 1.96k]
  |  Branch (73:47): [True: 728, False: 1.23k]
  ------------------
   74|  4.27k|	    {
   75|  4.27k|	      endok = 1;
   76|  4.27k|	    }
   77|  1.23k|	  else
   78|  1.23k|	    {
   79|  1.23k|	      if (bc != UC_BIDI_ES && bc != UC_BIDI_CS && bc != UC_BIDI_ET
  ------------------
  |  Branch (79:12): [True: 987, False: 248]
  |  Branch (79:32): [True: 987, False: 0]
  |  Branch (79:52): [True: 987, False: 0]
  ------------------
   80|  1.23k|		  && bc != UC_BIDI_ON && bc != UC_BIDI_BN)
  ------------------
  |  Branch (80:8): [True: 791, False: 196]
  |  Branch (80:28): [True: 791, False: 0]
  ------------------
   81|    791|		{
   82|       |		  /* printf("LTR label contains invalid code point\n"); */
   83|    791|		  return IDN2_BIDI;
   84|    791|		}
   85|    444|	      endok = 0;
   86|    444|	    }
   87|  5.51k|	}
   88|       |      /* printf("LTR label ends with invalid code point\n"); */
   89|      0|      return endok ? IDN2_OK : IDN2_BIDI;
  ------------------
  |  Branch (89:14): [True: 0, False: 0]
  ------------------
   90|       |
   91|    417|    case UC_BIDI_R:
  ------------------
  |  Branch (91:5): [True: 417, False: 3.62k]
  ------------------
   92|  2.59k|    case UC_BIDI_AL:
  ------------------
  |  Branch (92:5): [True: 2.18k, False: 1.86k]
  ------------------
   93|       |      // check 2.2, 2.3, 2.4
   94|       |      /* printf("Label[0]=%04X: %s\n", label[0], uc_bidi_category_name(bc)); */
   95|  7.10k|      for (size_t it = 1; it < llen; it++)
  ------------------
  |  Branch (95:27): [True: 4.83k, False: 2.26k]
  ------------------
   96|  4.83k|	{
   97|  4.83k|	  bc = uc_bidi_category (label[it]);
   98|       |
   99|       |	  /* printf("Label[%d]=%04X: %s\n", (int) it, label[it], uc_bidi_category_name(bc)); */
  100|  4.83k|	  if (bc == UC_BIDI_R || bc == UC_BIDI_AL || bc == UC_BIDI_EN
  ------------------
  |  Branch (100:8): [True: 475, False: 4.36k]
  |  Branch (100:27): [True: 2.14k, False: 2.22k]
  |  Branch (100:47): [True: 271, False: 1.94k]
  ------------------
  101|  4.83k|	      || bc == UC_BIDI_AN || bc == UC_BIDI_NSM)
  ------------------
  |  Branch (101:11): [True: 196, False: 1.75k]
  |  Branch (101:31): [True: 746, False: 1.00k]
  ------------------
  102|  3.83k|	    {
  103|  3.83k|	      endok = 1;
  104|  3.83k|	    }
  105|  1.00k|	  else
  106|  1.00k|	    {
  107|  1.00k|	      if (bc != UC_BIDI_ES && bc != UC_BIDI_CS && bc != UC_BIDI_ET
  ------------------
  |  Branch (107:12): [True: 808, False: 199]
  |  Branch (107:32): [True: 808, False: 0]
  |  Branch (107:52): [True: 808, False: 0]
  ------------------
  108|  1.00k|		  && bc != UC_BIDI_ON && bc != UC_BIDI_BN)
  ------------------
  |  Branch (108:8): [True: 612, False: 196]
  |  Branch (108:28): [True: 334, False: 278]
  ------------------
  109|    334|		{
  110|       |		  /* printf("RTL label contains invalid code point\n"); */
  111|    334|		  return IDN2_BIDI;
  112|    334|		}
  113|    673|	      endok = 0;
  114|    673|	    }
  115|  4.83k|	}
  116|       |      /* printf("RTL label ends with invalid code point\n"); */
  117|  2.26k|      return endok ? IDN2_OK : IDN2_BIDI;
  ------------------
  |  Branch (117:14): [True: 2.24k, False: 17]
  ------------------
  118|       |
  119|    656|    default:
  ------------------
  |  Branch (119:5): [True: 656, False: 3.39k]
  ------------------
  120|       |      /* printf("Label begins with invalid BIDI class %s\n", uc_bidi_category_name(bc)); */
  121|    656|      return IDN2_BIDI;
  122|  4.04k|    }
  123|  4.04k|}
bidi.c:_isBidi:
   42|  9.46k|{
   43|  70.5k|  for (; (ssize_t) llen > 0; llen--)
  ------------------
  |  Branch (43:10): [True: 65.1k, False: 5.42k]
  ------------------
   44|  65.1k|    {
   45|  65.1k|      int bc = uc_bidi_category (*label++);
   46|       |
   47|  65.1k|      if (bc == UC_BIDI_R || bc == UC_BIDI_AL || bc == UC_BIDI_AN)
  ------------------
  |  Branch (47:11): [True: 561, False: 64.5k]
  |  Branch (47:30): [True: 2.53k, False: 62.0k]
  |  Branch (47:50): [True: 954, False: 61.0k]
  ------------------
   48|  4.04k|	return 1;
   49|  65.1k|    }
   50|       |
   51|  5.42k|  return 0;
   52|  9.46k|}

_idn2_contextj_rule:
   38|  79.7k|{
   39|  79.7k|  uint32_t cp;
   40|       |
   41|  79.7k|  if (llen == 0)
  ------------------
  |  Branch (41:7): [True: 0, False: 79.7k]
  ------------------
   42|      0|    return IDN2_OK;
   43|       |
   44|  79.7k|  cp = label[pos];
   45|       |
   46|  79.7k|  if (!_idn2_contextj_p (cp))
  ------------------
  |  Branch (46:7): [True: 77.0k, False: 2.77k]
  ------------------
   47|  77.0k|    return IDN2_OK;
   48|       |
   49|  2.77k|  switch (cp)
  ------------------
  |  Branch (49:11): [True: 0, False: 2.77k]
  ------------------
   50|  2.77k|    {
   51|  2.06k|    case 0x200C:		/* ZERO WIDTH NON-JOINER */
  ------------------
  |  Branch (51:5): [True: 2.06k, False: 711]
  ------------------
   52|  2.06k|      if (pos > 0)
  ------------------
  |  Branch (52:11): [True: 1.83k, False: 230]
  ------------------
   53|  1.83k|	{
   54|       |	  /* If Canonical_Combining_Class(Before(cp)) .eq.  Virama Then True; */
   55|  1.83k|	  uint32_t before_cp = label[pos - 1];
   56|  1.83k|	  int cc = uc_combining_class (before_cp);
   57|  1.83k|	  if (cc == UC_CCC_VR)
  ------------------
  |  Branch (57:8): [True: 210, False: 1.62k]
  ------------------
   58|    210|	    return IDN2_OK;
   59|  1.83k|	}
   60|       |
   61|       |      /* See http://permalink.gmane.org/gmane.ietf.idnabis/6980 for
   62|       |         clarified rule. */
   63|       |
   64|  1.85k|      if (pos == 0 || pos == llen - 1)
  ------------------
  |  Branch (64:11): [True: 230, False: 1.62k]
  |  Branch (64:23): [True: 261, False: 1.36k]
  ------------------
   65|    491|	return IDN2_CONTEXTJ;
   66|       |
   67|  1.36k|      {
   68|  1.36k|	int jt;
   69|  1.36k|	size_t tmp;
   70|       |
   71|       |	/* Search backwards. */
   72|  1.36k|	for (tmp = pos - 1;; tmp--)
   73|  2.14k|	  {
   74|  2.14k|	    jt = uc_joining_type (label[tmp]);
   75|  2.14k|	    if (jt == UC_JOINING_TYPE_L || jt == UC_JOINING_TYPE_D)
  ------------------
  |  Branch (75:10): [True: 210, False: 1.93k]
  |  Branch (75:37): [True: 570, False: 1.36k]
  ------------------
   76|    780|	      break;
   77|  1.36k|	    if (tmp == 0)
  ------------------
  |  Branch (77:10): [True: 362, False: 1.00k]
  ------------------
   78|    362|	      return IDN2_CONTEXTJ;
   79|  1.00k|	    if (jt == UC_JOINING_TYPE_T)
  ------------------
  |  Branch (79:10): [True: 788, False: 218]
  ------------------
   80|    788|	      continue;
   81|    218|	    return IDN2_CONTEXTJ;
   82|  1.00k|	  }
   83|       |
   84|       |	/* Search forward. */
   85|  1.23k|	for (tmp = pos + 1; tmp < llen; tmp++)
  ------------------
  |  Branch (85:22): [True: 1.23k, False: 0]
  ------------------
   86|  1.23k|	  {
   87|  1.23k|	    jt = uc_joining_type (label[tmp]);
   88|  1.23k|	    if (jt == UC_JOINING_TYPE_R || jt == UC_JOINING_TYPE_D)
  ------------------
  |  Branch (88:10): [True: 1, False: 1.23k]
  |  Branch (88:37): [True: 283, False: 951]
  ------------------
   89|    284|	      break;
   90|    951|	    if (tmp == llen - 1)
  ------------------
  |  Branch (90:10): [True: 376, False: 575]
  ------------------
   91|    376|	      return IDN2_CONTEXTJ;
   92|    575|	    if (jt == UC_JOINING_TYPE_T)
  ------------------
  |  Branch (92:10): [True: 455, False: 120]
  ------------------
   93|    455|	      continue;
   94|    120|	    return IDN2_CONTEXTJ;
   95|    575|	  }
   96|    780|      }
   97|       |
   98|    284|      return IDN2_OK;
   99|      0|      break;
  100|       |
  101|    711|    case 0x200D:		/* ZERO WIDTH JOINER */
  ------------------
  |  Branch (101:5): [True: 711, False: 2.06k]
  ------------------
  102|    711|      if (pos > 0)
  ------------------
  |  Branch (102:11): [True: 461, False: 250]
  ------------------
  103|    461|	{
  104|    461|	  uint32_t before_cp = label[pos - 1];
  105|    461|	  int cc = uc_combining_class (before_cp);
  106|    461|	  if (cc == UC_CCC_VR)
  ------------------
  |  Branch (106:8): [True: 210, False: 251]
  ------------------
  107|    210|	    return IDN2_OK;
  108|    461|	}
  109|    501|      return IDN2_CONTEXTJ;
  110|  2.77k|    }
  111|       |
  112|      0|  return IDN2_CONTEXTJ_NO_RULE;
  113|  2.77k|}
_idn2_contexto_with_rule:
  230|  6.82k|{
  231|  6.82k|  switch (cp)
  ------------------
  |  Branch (231:11): [True: 0, False: 6.82k]
  ------------------
  232|  6.82k|    {
  233|    524|    case 0x00B7:
  ------------------
  |  Branch (233:5): [True: 524, False: 6.29k]
  ------------------
  234|       |      /* MIDDLE DOT */
  235|    751|    case 0x0375:
  ------------------
  |  Branch (235:5): [True: 227, False: 6.59k]
  ------------------
  236|       |      /* GREEK LOWER NUMERAL SIGN (KERAIA) */
  237|    955|    case 0x05F3:
  ------------------
  |  Branch (237:5): [True: 204, False: 6.61k]
  ------------------
  238|       |      /* HEBREW PUNCTUATION GERESH */
  239|  1.15k|    case 0x05F4:
  ------------------
  |  Branch (239:5): [True: 200, False: 6.62k]
  ------------------
  240|       |      /* HEBREW PUNCTUATION GERSHAYIM */
  241|  1.38k|    case 0x0660:
  ------------------
  |  Branch (241:5): [True: 232, False: 6.59k]
  ------------------
  242|  1.59k|    case 0x0661:
  ------------------
  |  Branch (242:5): [True: 209, False: 6.61k]
  ------------------
  243|  1.98k|    case 0x0662:
  ------------------
  |  Branch (243:5): [True: 392, False: 6.43k]
  ------------------
  244|  2.25k|    case 0x0663:
  ------------------
  |  Branch (244:5): [True: 266, False: 6.55k]
  ------------------
  245|  2.47k|    case 0x0664:
  ------------------
  |  Branch (245:5): [True: 217, False: 6.60k]
  ------------------
  246|  2.68k|    case 0x0665:
  ------------------
  |  Branch (246:5): [True: 211, False: 6.61k]
  ------------------
  247|  3.37k|    case 0x0666:
  ------------------
  |  Branch (247:5): [True: 692, False: 6.13k]
  ------------------
  248|  3.60k|    case 0x0667:
  ------------------
  |  Branch (248:5): [True: 230, False: 6.59k]
  ------------------
  249|  3.85k|    case 0x0668:
  ------------------
  |  Branch (249:5): [True: 249, False: 6.57k]
  ------------------
  250|  4.08k|    case 0x0669:
  ------------------
  |  Branch (250:5): [True: 231, False: 6.59k]
  ------------------
  251|       |      /* ARABIC-INDIC DIGITS */
  252|  4.29k|    case 0x06F0:
  ------------------
  |  Branch (252:5): [True: 206, False: 6.61k]
  ------------------
  253|  4.51k|    case 0x06F1:
  ------------------
  |  Branch (253:5): [True: 226, False: 6.59k]
  ------------------
  254|  4.85k|    case 0x06F2:
  ------------------
  |  Branch (254:5): [True: 341, False: 6.48k]
  ------------------
  255|  5.07k|    case 0x06F3:
  ------------------
  |  Branch (255:5): [True: 217, False: 6.60k]
  ------------------
  256|  5.29k|    case 0x06F4:
  ------------------
  |  Branch (256:5): [True: 225, False: 6.59k]
  ------------------
  257|  5.50k|    case 0x06F5:
  ------------------
  |  Branch (257:5): [True: 210, False: 6.61k]
  ------------------
  258|  5.71k|    case 0x06F6:
  ------------------
  |  Branch (258:5): [True: 206, False: 6.61k]
  ------------------
  259|  5.93k|    case 0x06F7:
  ------------------
  |  Branch (259:5): [True: 217, False: 6.60k]
  ------------------
  260|  6.28k|    case 0x06F8:
  ------------------
  |  Branch (260:5): [True: 351, False: 6.47k]
  ------------------
  261|  6.62k|    case 0x06F9:
  ------------------
  |  Branch (261:5): [True: 344, False: 6.47k]
  ------------------
  262|       |      /* EXTENDED ARABIC-INDIC DIGITS */
  263|  6.82k|    case 0x30FB:
  ------------------
  |  Branch (263:5): [True: 196, False: 6.62k]
  ------------------
  264|       |      /* KATAKANA MIDDLE DOT */
  265|  6.82k|      return true;
  266|      0|      break;
  267|  6.82k|    }
  268|       |
  269|      0|  return false;
  270|  6.82k|}

idn2_strerror:
   48|  12.4k|{
   49|  12.4k|  bindtextdomain (PACKAGE, LOCALEDIR);
   50|       |
   51|  12.4k|  switch (rc)
   52|  12.4k|    {
   53|      0|    case IDN2_OK:
  ------------------
  |  Branch (53:5): [True: 0, False: 12.4k]
  ------------------
   54|      0|      return _("success");
  ------------------
  |  |   34|      0|#define _(x) x
  ------------------
   55|      0|    case IDN2_MALLOC:
  ------------------
  |  Branch (55:5): [True: 0, False: 12.4k]
  ------------------
   56|      0|      return _("out of memory");
  ------------------
  |  |   34|      0|#define _(x) x
  ------------------
   57|      0|    case IDN2_NO_CODESET:
  ------------------
  |  Branch (57:5): [True: 0, False: 12.4k]
  ------------------
   58|      0|      return _("could not determine locale encoding format");
  ------------------
  |  |   34|      0|#define _(x) x
  ------------------
   59|      0|    case IDN2_ICONV_FAIL:
  ------------------
  |  Branch (59:5): [True: 0, False: 12.4k]
  ------------------
   60|      0|      return _("could not convert string to UTF-8");
  ------------------
  |  |   34|      0|#define _(x) x
  ------------------
   61|  6.69k|    case IDN2_ENCODING_ERROR:
  ------------------
  |  Branch (61:5): [True: 6.69k, False: 5.73k]
  ------------------
   62|  6.69k|      return _("string encoding error");
  ------------------
  |  |   34|  6.69k|#define _(x) x
  ------------------
   63|      0|    case IDN2_NFC:
  ------------------
  |  Branch (63:5): [True: 0, False: 12.4k]
  ------------------
   64|      0|      return _("string could not be NFC normalized");
  ------------------
  |  |   34|      0|#define _(x) x
  ------------------
   65|  1.04k|    case IDN2_PUNYCODE_BAD_INPUT:
  ------------------
  |  Branch (65:5): [True: 1.04k, False: 11.3k]
  ------------------
   66|  1.04k|      return _("string contains invalid punycode data");
  ------------------
  |  |   34|  1.04k|#define _(x) x
  ------------------
   67|  1.01k|    case IDN2_PUNYCODE_BIG_OUTPUT:
  ------------------
  |  Branch (67:5): [True: 1.01k, False: 11.4k]
  ------------------
   68|  1.01k|      return _("punycode encoded data will be too large");
  ------------------
  |  |   34|  1.01k|#define _(x) x
  ------------------
   69|    295|    case IDN2_PUNYCODE_OVERFLOW:
  ------------------
  |  Branch (69:5): [True: 295, False: 12.1k]
  ------------------
   70|    295|      return _("punycode conversion resulted in overflow");
  ------------------
  |  |   34|    295|#define _(x) x
  ------------------
   71|    448|    case IDN2_TOO_BIG_DOMAIN:
  ------------------
  |  Branch (71:5): [True: 448, False: 11.9k]
  ------------------
   72|    448|      return _("domain name longer than 255 characters");
  ------------------
  |  |   34|    448|#define _(x) x
  ------------------
   73|    326|    case IDN2_TOO_BIG_LABEL:
  ------------------
  |  Branch (73:5): [True: 326, False: 12.1k]
  ------------------
   74|    326|      return _("domain label longer than 63 characters");
  ------------------
  |  |   34|    326|#define _(x) x
  ------------------
   75|      0|    case IDN2_INVALID_ALABEL:
  ------------------
  |  Branch (75:5): [True: 0, False: 12.4k]
  ------------------
   76|      0|      return _("input A-label is not valid");
  ------------------
  |  |   34|      0|#define _(x) x
  ------------------
   77|      0|    case IDN2_UALABEL_MISMATCH:
  ------------------
  |  Branch (77:5): [True: 0, False: 12.4k]
  ------------------
   78|      0|      return _("input A-label and U-label does not match");
  ------------------
  |  |   34|      0|#define _(x) x
  ------------------
   79|    749|    case IDN2_NOT_NFC:
  ------------------
  |  Branch (79:5): [True: 749, False: 11.6k]
  ------------------
   80|    749|      return _("string is not in Unicode NFC format");
  ------------------
  |  |   34|    749|#define _(x) x
  ------------------
   81|    293|    case IDN2_2HYPHEN:
  ------------------
  |  Branch (81:5): [True: 293, False: 12.1k]
  ------------------
   82|    293|      return _("string contains forbidden two hyphens pattern");
  ------------------
  |  |   34|    293|#define _(x) x
  ------------------
   83|    418|    case IDN2_HYPHEN_STARTEND:
  ------------------
  |  Branch (83:5): [True: 418, False: 12.0k]
  ------------------
   84|    418|      return _("string start/ends with forbidden hyphen");
  ------------------
  |  |   34|    418|#define _(x) x
  ------------------
   85|    391|    case IDN2_LEADING_COMBINING:
  ------------------
  |  Branch (85:5): [True: 391, False: 12.0k]
  ------------------
   86|    391|      return _("string contains a forbidden leading combining character");
  ------------------
  |  |   34|    391|#define _(x) x
  ------------------
   87|    316|    case IDN2_DISALLOWED:
  ------------------
  |  Branch (87:5): [True: 316, False: 12.1k]
  ------------------
   88|    316|      return _("string contains a disallowed character");
  ------------------
  |  |   34|    316|#define _(x) x
  ------------------
   89|      0|    case IDN2_CONTEXTJ:
  ------------------
  |  Branch (89:5): [True: 0, False: 12.4k]
  ------------------
   90|      0|      return _("string contains a forbidden context-j character");
  ------------------
  |  |   34|      0|#define _(x) x
  ------------------
   91|      0|    case IDN2_CONTEXTJ_NO_RULE:
  ------------------
  |  Branch (91:5): [True: 0, False: 12.4k]
  ------------------
   92|      0|      return _("string contains a context-j character with null rule");
  ------------------
  |  |   34|      0|#define _(x) x
  ------------------
   93|      0|    case IDN2_CONTEXTO:
  ------------------
  |  Branch (93:5): [True: 0, False: 12.4k]
  ------------------
   94|      0|      return _("string contains a forbidden context-o character");
  ------------------
  |  |   34|      0|#define _(x) x
  ------------------
   95|      0|    case IDN2_CONTEXTO_NO_RULE:
  ------------------
  |  Branch (95:5): [True: 0, False: 12.4k]
  ------------------
   96|      0|      return _("string contains a context-o character with null rule");
  ------------------
  |  |   34|      0|#define _(x) x
  ------------------
   97|      0|    case IDN2_UNASSIGNED:
  ------------------
  |  Branch (97:5): [True: 0, False: 12.4k]
  ------------------
   98|      0|      return _("string contains unassigned code point");
  ------------------
  |  |   34|      0|#define _(x) x
  ------------------
   99|      0|    case IDN2_BIDI:
  ------------------
  |  Branch (99:5): [True: 0, False: 12.4k]
  ------------------
  100|      0|      return _("string has forbidden bi-directional properties");
  ------------------
  |  |   34|      0|#define _(x) x
  ------------------
  101|      0|    case IDN2_DOT_IN_LABEL:
  ------------------
  |  Branch (101:5): [True: 0, False: 12.4k]
  ------------------
  102|      0|      return _("domain label has forbidden dot (TR46)");
  ------------------
  |  |   34|      0|#define _(x) x
  ------------------
  103|      0|    case IDN2_INVALID_TRANSITIONAL:
  ------------------
  |  Branch (103:5): [True: 0, False: 12.4k]
  ------------------
  104|      0|      return
  105|      0|	_("domain label has character forbidden in transitional mode (TR46)");
  ------------------
  |  |   34|      0|#define _(x) x
  ------------------
  106|    440|    case IDN2_INVALID_NONTRANSITIONAL:
  ------------------
  |  Branch (106:5): [True: 440, False: 11.9k]
  ------------------
  107|    440|      return
  108|    440|	_
  ------------------
  |  |   34|    440|#define _(x) x
  ------------------
  109|      0|	("domain label has character forbidden in non-transitional mode (TR46)");
  110|      0|    case IDN2_ALABEL_ROUNDTRIP_FAILED:
  ------------------
  |  Branch (110:5): [True: 0, False: 12.4k]
  ------------------
  111|      0|      return _("A-label roundtrip failed");
  ------------------
  |  |   34|      0|#define _(x) x
  ------------------
  112|      0|    default:
  ------------------
  |  Branch (112:5): [True: 0, False: 12.4k]
  ------------------
  113|      0|      return _("Unknown error");
  ------------------
  |  |   34|      0|#define _(x) x
  ------------------
  114|  12.4k|    }
  115|  12.4k|}

_idn2_u8_to_u32_nfc:
   90|  23.1k|{
   91|  23.1k|  uint32_t *p;
   92|  23.1k|  size_t plen;
   93|       |
   94|  23.1k|  p = u8_to_u32 (src, srclen, NULL, &plen);
   95|  23.1k|  if (p == NULL)
  ------------------
  |  Branch (95:7): [True: 0, False: 23.1k]
  ------------------
   96|      0|    {
   97|      0|      if (errno == ENOMEM)
  ------------------
  |  Branch (97:11): [True: 0, False: 0]
  ------------------
   98|      0|	return IDN2_MALLOC;
   99|      0|      return IDN2_ENCODING_ERROR;
  100|      0|    }
  101|       |
  102|  23.1k|  if (nfc && !_isNFC (p, plen))
  ------------------
  |  Branch (102:7): [True: 0, False: 23.1k]
  |  Branch (102:14): [True: 0, False: 0]
  ------------------
  103|      0|    {
  104|      0|      size_t tmplen;
  105|      0|      uint32_t *tmp = u32_normalize (UNINORM_NFC, p, plen, NULL, &tmplen);
  ------------------
  |  |  127|      0|#define UNINORM_NFC (&uninorm_nfc)
  ------------------
  106|      0|      free (p);
  107|      0|      if (tmp == NULL)
  ------------------
  |  Branch (107:11): [True: 0, False: 0]
  ------------------
  108|      0|	{
  109|      0|	  if (errno == ENOMEM)
  ------------------
  |  Branch (109:8): [True: 0, False: 0]
  ------------------
  110|      0|	    return IDN2_MALLOC;
  111|      0|	  return IDN2_NFC;
  112|      0|	}
  113|       |
  114|      0|      p = tmp;
  115|      0|      plen = tmplen;
  116|      0|    }
  117|       |
  118|  23.1k|  *out = p;
  119|  23.1k|  *outlen = plen;
  120|  23.1k|  return IDN2_OK;
  121|  23.1k|}
_idn2_ascii_p:
  125|  27.0k|{
  126|  27.0k|  size_t i;
  127|       |
  128|   113k|  for (i = 0; i < srclen; i++)
  ------------------
  |  Branch (128:15): [True: 108k, False: 5.01k]
  ------------------
  129|   108k|    if (src[i] >= 0x80)
  ------------------
  |  Branch (129:9): [True: 22.0k, False: 86.1k]
  ------------------
  130|  22.0k|      return false;
  131|       |
  132|  5.01k|  return true;
  133|  27.0k|}
_idn2_label_test:
  137|  45.5k|{
  138|  45.5k|  if (what & TEST_NFC)
  ------------------
  |  Branch (138:7): [True: 45.5k, False: 0]
  ------------------
  139|  45.5k|    {
  140|  45.5k|      size_t plen;
  141|  45.5k|      uint32_t *p = u32_normalize (UNINORM_NFC, label, llen,
  ------------------
  |  |  127|  45.5k|#define UNINORM_NFC (&uninorm_nfc)
  ------------------
  142|  45.5k|				   NULL, &plen);
  143|  45.5k|      int ok;
  144|  45.5k|      if (p == NULL)
  ------------------
  |  Branch (144:11): [True: 0, False: 45.5k]
  ------------------
  145|      0|	{
  146|      0|	  if (errno == ENOMEM)
  ------------------
  |  Branch (146:8): [True: 0, False: 0]
  ------------------
  147|      0|	    return IDN2_MALLOC;
  148|      0|	  return IDN2_NFC;
  149|      0|	}
  150|  45.5k|      ok = llen == plen && memcmp (label, p, plen * sizeof (*label)) == 0;
  ------------------
  |  Branch (150:12): [True: 45.1k, False: 396]
  |  Branch (150:28): [True: 44.1k, False: 1.04k]
  ------------------
  151|  45.5k|      free (p);
  152|  45.5k|      if (!ok)
  ------------------
  |  Branch (152:11): [True: 1.44k, False: 44.1k]
  ------------------
  153|  1.44k|	return IDN2_NOT_NFC;
  154|  45.5k|    }
  155|       |
  156|  44.1k|  if (what & TEST_2HYPHEN)
  ------------------
  |  Branch (156:7): [True: 44.1k, False: 0]
  ------------------
  157|  44.1k|    {
  158|  44.1k|      if (llen >= 4 && label[2] == '-' && label[3] == '-')
  ------------------
  |  Branch (158:11): [True: 19.0k, False: 25.0k]
  |  Branch (158:24): [True: 1.27k, False: 17.7k]
  |  Branch (158:43): [True: 620, False: 657]
  ------------------
  159|    620|	return IDN2_2HYPHEN;
  160|  44.1k|    }
  161|       |
  162|  43.5k|  if (what & TEST_HYPHEN_STARTEND)
  ------------------
  |  Branch (162:7): [True: 29.2k, False: 14.2k]
  ------------------
  163|  29.2k|    {
  164|  29.2k|      if (llen > 0 && (label[0] == '-' || label[llen - 1] == '-'))
  ------------------
  |  Branch (164:11): [True: 28.6k, False: 598]
  |  Branch (164:24): [True: 699, False: 27.9k]
  |  Branch (164:43): [True: 366, False: 27.6k]
  ------------------
  165|  1.06k|	return IDN2_HYPHEN_STARTEND;
  166|  29.2k|    }
  167|       |
  168|  42.4k|  if (what & TEST_LEADING_COMBINING)
  ------------------
  |  Branch (168:7): [True: 42.4k, False: 0]
  ------------------
  169|  42.4k|    {
  170|  42.4k|      if (llen > 0 && uc_is_general_category (label[0], UC_CATEGORY_M))
  ------------------
  |  Branch (170:11): [True: 41.8k, False: 598]
  |  Branch (170:23): [True: 797, False: 41.0k]
  ------------------
  171|    797|	return IDN2_LEADING_COMBINING;
  172|  42.4k|    }
  173|       |
  174|  41.6k|  if (what & TEST_DISALLOWED)
  ------------------
  |  Branch (174:7): [True: 14.2k, False: 27.4k]
  ------------------
  175|  14.2k|    {
  176|  14.2k|      size_t i;
  177|   101k|      for (i = 0; i < llen; i++)
  ------------------
  |  Branch (177:19): [True: 89.5k, False: 11.5k]
  ------------------
  178|  89.5k|	if (_idn2_disallowed_p (label[i]))
  ------------------
  |  Branch (178:6): [True: 2.70k, False: 86.8k]
  ------------------
  179|  2.70k|	  {
  180|  2.70k|	    if ((what & (TEST_TRANSITIONAL | TEST_NONTRANSITIONAL)) &&
  ------------------
  |  Branch (180:10): [True: 2.70k, False: 0]
  ------------------
  181|  2.70k|		(what & TEST_ALLOW_STD3_DISALLOWED))
  ------------------
  |  Branch (181:3): [True: 0, False: 2.70k]
  ------------------
  182|      0|	      {
  183|      0|		IDNAMap map;
  184|      0|		get_idna_map (label[i], &map);
  185|      0|		if (map_is (&map, TR46_FLG_DISALLOWED_STD3_VALID) ||
  ------------------
  |  |   41|      0|# define TR46_FLG_DISALLOWED_STD3_VALID  64
  ------------------
  |  Branch (185:7): [True: 0, False: 0]
  ------------------
  186|      0|		    map_is (&map, TR46_FLG_DISALLOWED_STD3_MAPPED))
  ------------------
  |  |   40|      0|# define TR46_FLG_DISALLOWED_STD3_MAPPED 32
  ------------------
  |  Branch (186:7): [True: 0, False: 0]
  ------------------
  187|      0|		  continue;
  188|       |
  189|      0|	      }
  190|       |
  191|  2.70k|	    return IDN2_DISALLOWED;
  192|  2.70k|	  }
  193|  14.2k|    }
  194|       |
  195|  38.9k|  if (what & TEST_CONTEXTJ)
  ------------------
  |  Branch (195:7): [True: 0, False: 38.9k]
  ------------------
  196|      0|    {
  197|      0|      size_t i;
  198|      0|      for (i = 0; i < llen; i++)
  ------------------
  |  Branch (198:19): [True: 0, False: 0]
  ------------------
  199|      0|	if (_idn2_contextj_p (label[i]))
  ------------------
  |  Branch (199:6): [True: 0, False: 0]
  ------------------
  200|      0|	  return IDN2_CONTEXTJ;
  201|      0|    }
  202|       |
  203|  38.9k|  if (what & TEST_CONTEXTJ_RULE)
  ------------------
  |  Branch (203:7): [True: 11.5k, False: 27.4k]
  ------------------
  204|  11.5k|    {
  205|  11.5k|      size_t i;
  206|  11.5k|      int rc;
  207|       |
  208|  89.2k|      for (i = 0; i < llen; i++)
  ------------------
  |  Branch (208:19): [True: 79.7k, False: 9.46k]
  ------------------
  209|  79.7k|	{
  210|  79.7k|	  rc = _idn2_contextj_rule (label, llen, i);
  211|  79.7k|	  if (rc != IDN2_OK)
  ------------------
  |  Branch (211:8): [True: 2.06k, False: 77.7k]
  ------------------
  212|  2.06k|	    return rc;
  213|  79.7k|	}
  214|  11.5k|    }
  215|       |
  216|  36.8k|  if (what & TEST_CONTEXTO)
  ------------------
  |  Branch (216:7): [True: 0, False: 36.8k]
  ------------------
  217|      0|    {
  218|      0|      size_t i;
  219|      0|      for (i = 0; i < llen; i++)
  ------------------
  |  Branch (219:19): [True: 0, False: 0]
  ------------------
  220|      0|	if (_idn2_contexto_p (label[i]))
  ------------------
  |  Branch (220:6): [True: 0, False: 0]
  ------------------
  221|      0|	  return IDN2_CONTEXTO;
  222|      0|    }
  223|       |
  224|  36.8k|  if (what & TEST_CONTEXTO_WITH_RULE)
  ------------------
  |  Branch (224:7): [True: 9.46k, False: 27.4k]
  ------------------
  225|  9.46k|    {
  226|  9.46k|      size_t i;
  227|  82.4k|      for (i = 0; i < llen; i++)
  ------------------
  |  Branch (227:19): [True: 73.0k, False: 9.46k]
  ------------------
  228|  73.0k|	if (_idn2_contexto_p (label[i])
  ------------------
  |  Branch (228:6): [True: 6.82k, False: 66.1k]
  ------------------
  229|  73.0k|	    && !_idn2_contexto_with_rule (label[i]))
  ------------------
  |  Branch (229:9): [True: 0, False: 6.82k]
  ------------------
  230|      0|	  return IDN2_CONTEXTO_NO_RULE;
  231|  9.46k|    }
  232|       |
  233|  36.8k|  if (what & TEST_CONTEXTO_RULE)
  ------------------
  |  Branch (233:7): [True: 0, False: 36.8k]
  ------------------
  234|      0|    {
  235|      0|      size_t i;
  236|      0|      int rc;
  237|       |
  238|      0|      for (i = 0; i < llen; i++)
  ------------------
  |  Branch (238:19): [True: 0, False: 0]
  ------------------
  239|      0|	{
  240|      0|	  rc = _idn2_contexto_rule (label, llen, i);
  241|      0|	  if (rc != IDN2_OK)
  ------------------
  |  Branch (241:8): [True: 0, False: 0]
  ------------------
  242|      0|	    return rc;
  243|      0|	}
  244|      0|    }
  245|       |
  246|  36.8k|  if (what & TEST_UNASSIGNED)
  ------------------
  |  Branch (246:7): [True: 9.46k, False: 27.4k]
  ------------------
  247|  9.46k|    {
  248|  9.46k|      size_t i;
  249|  82.4k|      for (i = 0; i < llen; i++)
  ------------------
  |  Branch (249:19): [True: 73.0k, False: 9.46k]
  ------------------
  250|  73.0k|	if (_idn2_unassigned_p (label[i]))
  ------------------
  |  Branch (250:6): [True: 0, False: 73.0k]
  ------------------
  251|      0|	  return IDN2_UNASSIGNED;
  252|  9.46k|    }
  253|       |
  254|  36.8k|  if (what & TEST_BIDI)
  ------------------
  |  Branch (254:7): [True: 9.46k, False: 27.4k]
  ------------------
  255|  9.46k|    {
  256|  9.46k|      int rc = _idn2_bidi (label, llen);
  257|  9.46k|      if (rc != IDN2_OK)
  ------------------
  |  Branch (257:11): [True: 1.79k, False: 7.67k]
  ------------------
  258|  1.79k|	return rc;
  259|  9.46k|    }
  260|       |
  261|  35.0k|  if (what & (TEST_TRANSITIONAL | TEST_NONTRANSITIONAL))
  ------------------
  |  Branch (261:7): [True: 35.0k, False: 0]
  ------------------
  262|  35.0k|    {
  263|  35.0k|      size_t i;
  264|  35.0k|      int transitional = what & TEST_TRANSITIONAL;
  265|       |
  266|       |      /* TR46: 4. The label must not contain a U+002E ( . ) FULL STOP */
  267|   342k|      for (i = 0; i < llen; i++)
  ------------------
  |  Branch (267:19): [True: 307k, False: 35.0k]
  ------------------
  268|   307k|	if (label[i] == 0x002E)
  ------------------
  |  Branch (268:6): [True: 0, False: 307k]
  ------------------
  269|      0|	  return IDN2_DOT_IN_LABEL;
  270|       |
  271|       |      /* TR46: 6. Each code point in the label must only have certain status
  272|       |       * values according to Section 5, IDNA Mapping Table:
  273|       |       *    a. For Transitional Processing, each value must be valid.
  274|       |       *    b. For Nontransitional Processing, each value must be either valid or deviation. */
  275|   341k|      for (i = 0; i < llen; i++)
  ------------------
  |  Branch (275:19): [True: 306k, False: 34.3k]
  ------------------
  276|   306k|	{
  277|   306k|	  IDNAMap map;
  278|       |
  279|   306k|	  get_idna_map (label[i], &map);
  280|       |
  281|   306k|	  if (map_is (&map, TR46_FLG_VALID) ||
  ------------------
  |  |   35|   306k|# define TR46_FLG_VALID                   1
  ------------------
  |  Branch (281:8): [True: 301k, False: 5.08k]
  ------------------
  282|   306k|	      (!transitional && map_is (&map, TR46_FLG_DEVIATION)))
  ------------------
  |  |   38|  5.08k|# define TR46_FLG_DEVIATION               8
  ------------------
  |  Branch (282:9): [True: 5.08k, False: 0]
  |  Branch (282:26): [True: 4.34k, False: 746]
  ------------------
  283|   306k|	    continue;
  284|       |
  285|    746|	  if (what & TEST_ALLOW_STD3_DISALLOWED &&
  ------------------
  |  Branch (285:8): [True: 0, False: 746]
  ------------------
  286|    746|	      (map_is (&map, TR46_FLG_DISALLOWED_STD3_VALID) ||
  ------------------
  |  |   41|      0|# define TR46_FLG_DISALLOWED_STD3_VALID  64
  ------------------
  |  Branch (286:9): [True: 0, False: 0]
  ------------------
  287|      0|	       map_is (&map, TR46_FLG_DISALLOWED_STD3_MAPPED)))
  ------------------
  |  |   40|      0|# define TR46_FLG_DISALLOWED_STD3_MAPPED 32
  ------------------
  |  Branch (287:9): [True: 0, False: 0]
  ------------------
  288|      0|	    continue;
  289|       |
  290|    746|	  return transitional ? IDN2_INVALID_TRANSITIONAL :
  ------------------
  |  Branch (290:11): [True: 0, False: 746]
  ------------------
  291|    746|	    IDN2_INVALID_NONTRANSITIONAL;
  292|    746|	}
  293|  35.0k|    }
  294|       |
  295|  34.3k|  return IDN2_OK;
  296|  35.0k|}

idn2_lookup_u8:
  531|  42.4k|{
  532|  42.4k|  size_t lookupnamelen = 0;
  533|  42.4k|  uint8_t _lookupname[IDN2_DOMAIN_MAX_LENGTH + 1];
  534|  42.4k|  uint8_t *src_allocated = NULL;
  535|  42.4k|  int rc;
  536|       |
  537|  42.4k|  if (src == NULL)
  ------------------
  |  Branch (537:7): [True: 0, False: 42.4k]
  ------------------
  538|      0|    {
  539|      0|      if (lookupname)
  ------------------
  |  Branch (539:11): [True: 0, False: 0]
  ------------------
  540|      0|	*lookupname = NULL;
  541|      0|      return IDN2_OK;
  542|      0|    }
  543|       |
  544|  42.4k|  rc = set_default_flags (&flags);
  545|  42.4k|  if (rc != IDN2_OK)
  ------------------
  |  Branch (545:7): [True: 0, False: 42.4k]
  ------------------
  546|      0|    return rc;
  547|       |
  548|  42.4k|  if (!(flags & IDN2_NO_TR46))
  ------------------
  |  Branch (548:7): [True: 42.4k, False: 0]
  ------------------
  549|  42.4k|    {
  550|  42.4k|      uint8_t *out = NULL;
  551|       |
  552|  42.4k|      rc = _tr46 (src, &out, flags);
  553|  42.4k|      if (rc != IDN2_OK)
  ------------------
  |  Branch (553:11): [True: 22.0k, False: 20.3k]
  ------------------
  554|  22.0k|	return rc;
  555|       |
  556|  20.3k|      src = src_allocated = out;
  557|  20.3k|    }
  558|       |
  559|  20.3k|  do
  560|  27.0k|    {
  561|  27.0k|      const uint8_t *end = (uint8_t *) strchrnul ((const char *) src, '.');
  562|       |      /* XXX Do we care about non-U+002E dots such as U+3002, U+FF0E
  563|       |         and U+FF61 here?  Perhaps when IDN2_NFC_INPUT? */
  564|  27.0k|      size_t labellen = end - src;
  565|  27.0k|      uint8_t tmp[IDN2_LABEL_MAX_LENGTH];
  566|  27.0k|      size_t tmplen = IDN2_LABEL_MAX_LENGTH;
  ------------------
  |  |  162|  27.0k|# define IDN2_LABEL_MAX_LENGTH 63
  ------------------
  567|       |
  568|  27.0k|      rc = label (src, labellen, tmp, &tmplen, flags);
  569|  27.0k|      if (rc != IDN2_OK)
  ------------------
  |  Branch (569:11): [True: 8.52k, False: 18.5k]
  ------------------
  570|  8.52k|	{
  571|  8.52k|	  free (src_allocated);
  572|  8.52k|	  return rc;
  573|  8.52k|	}
  574|       |
  575|  18.5k|      if (lookupnamelen + tmplen
  ------------------
  |  Branch (575:11): [True: 588, False: 17.9k]
  ------------------
  576|  18.5k|	  > IDN2_DOMAIN_MAX_LENGTH - (tmplen == 0 && *end == '\0' ? 1 : 2))
  ------------------
  |  |  173|  18.5k|# define IDN2_DOMAIN_MAX_LENGTH 255
  ------------------
  |  Branch (576:32): [True: 1.66k, False: 16.8k]
  |  Branch (576:47): [True: 1.07k, False: 585]
  ------------------
  577|    588|	{
  578|    588|	  free (src_allocated);
  579|    588|	  return IDN2_TOO_BIG_DOMAIN;
  580|    588|	}
  581|       |
  582|  17.9k|      memcpy (_lookupname + lookupnamelen, tmp, tmplen);
  583|  17.9k|      lookupnamelen += tmplen;
  584|       |
  585|  17.9k|      if (*end == '.')
  ------------------
  |  Branch (585:11): [True: 6.65k, False: 11.2k]
  ------------------
  586|  6.65k|	{
  587|  6.65k|	  if (lookupnamelen + 1 > IDN2_DOMAIN_MAX_LENGTH)
  ------------------
  |  |  173|  6.65k|# define IDN2_DOMAIN_MAX_LENGTH 255
  ------------------
  |  Branch (587:8): [True: 0, False: 6.65k]
  ------------------
  588|      0|	    {
  589|      0|	      free (src_allocated);
  590|      0|	      return IDN2_TOO_BIG_DOMAIN;
  591|      0|	    }
  592|       |
  593|  6.65k|	  _lookupname[lookupnamelen] = '.';
  594|  6.65k|	  lookupnamelen++;
  595|  6.65k|	}
  596|  17.9k|      _lookupname[lookupnamelen] = '\0';
  597|       |
  598|  17.9k|      src = end;
  599|  17.9k|    }
  600|  20.3k|  while (*src++);
  ------------------
  |  Branch (600:10): [True: 6.65k, False: 11.2k]
  ------------------
  601|       |
  602|  11.2k|  free (src_allocated);
  603|       |
  604|  11.2k|  if (lookupname)
  ------------------
  |  Branch (604:7): [True: 11.2k, False: 0]
  ------------------
  605|  11.2k|    {
  606|  11.2k|      uint8_t *tmp = (uint8_t *) malloc (lookupnamelen + 1);
  607|       |
  608|  11.2k|      if (tmp == NULL)
  ------------------
  |  Branch (608:11): [True: 0, False: 11.2k]
  ------------------
  609|      0|	return IDN2_MALLOC;
  610|       |
  611|  11.2k|      memcpy (tmp, _lookupname, lookupnamelen + 1);
  612|  11.2k|      *lookupname = tmp;
  613|  11.2k|    }
  614|       |
  615|  11.2k|  return IDN2_OK;
  616|  11.2k|}
lookup.c:set_default_flags:
  106|  42.4k|{
  107|  42.4k|  if (((*flags) & IDN2_TRANSITIONAL) && ((*flags) & IDN2_NONTRANSITIONAL))
  ------------------
  |  Branch (107:7): [True: 18.7k, False: 23.6k]
  |  Branch (107:41): [True: 0, False: 18.7k]
  ------------------
  108|      0|    return IDN2_INVALID_FLAGS;
  109|       |
  110|  42.4k|  if (((*flags) & (IDN2_TRANSITIONAL | IDN2_NONTRANSITIONAL))
  ------------------
  |  Branch (110:7): [True: 42.4k, False: 0]
  ------------------
  111|  42.4k|      && ((*flags) & IDN2_NO_TR46))
  ------------------
  |  Branch (111:10): [True: 0, False: 42.4k]
  ------------------
  112|      0|    return IDN2_INVALID_FLAGS;
  113|       |
  114|  42.4k|  if (((*flags) & IDN2_ALABEL_ROUNDTRIP)
  ------------------
  |  Branch (114:7): [True: 0, False: 42.4k]
  ------------------
  115|  42.4k|      && ((*flags) & IDN2_NO_ALABEL_ROUNDTRIP))
  ------------------
  |  Branch (115:10): [True: 0, False: 0]
  ------------------
  116|      0|    return IDN2_INVALID_FLAGS;
  117|       |
  118|  42.4k|  if (!((*flags) & (IDN2_NO_TR46 | IDN2_TRANSITIONAL)))
  ------------------
  |  Branch (118:7): [True: 23.6k, False: 18.7k]
  ------------------
  119|  23.6k|    *flags |= IDN2_NONTRANSITIONAL;
  120|       |
  121|  42.4k|  return IDN2_OK;
  122|  42.4k|}
lookup.c:_tr46:
  260|  42.4k|{
  261|  42.4k|  size_t len, it;
  262|  42.4k|  uint32_t *domain_u32;
  263|  42.4k|  int err = IDN2_OK, rc;
  264|  42.4k|  int transitional = 0;
  265|  42.4k|  int test_flags;
  266|       |
  267|  42.4k|  if (flags & IDN2_TRANSITIONAL)
  ------------------
  |  Branch (267:7): [True: 18.7k, False: 23.6k]
  ------------------
  268|  18.7k|    transitional = 1;
  269|       |
  270|       |  /* convert UTF-8 to UTF-32 */
  271|  42.4k|  if (!(domain_u32 =
  ------------------
  |  Branch (271:7): [True: 13.3k, False: 29.0k]
  ------------------
  272|  42.4k|	u8_to_u32 (domain_u8, u8_strlen (domain_u8) + 1, NULL, &len)))
  273|  13.3k|    {
  274|  13.3k|      if (errno == ENOMEM)
  ------------------
  |  Branch (274:11): [True: 0, False: 13.3k]
  ------------------
  275|      0|	return IDN2_MALLOC;
  276|  13.3k|      return IDN2_ENCODING_ERROR;
  277|  13.3k|    }
  278|       |
  279|  29.0k|  size_t len2 = 0;
  280|   327k|  for (it = 0; it < len - 1; it++)
  ------------------
  |  Branch (280:16): [True: 299k, False: 28.4k]
  ------------------
  281|   299k|    {
  282|   299k|      IDNAMap map;
  283|       |
  284|   299k|      get_idna_map (domain_u32[it], &map);
  285|       |
  286|   299k|      if (map_is (&map, TR46_FLG_DISALLOWED))
  ------------------
  |  |   39|   299k|# define TR46_FLG_DISALLOWED             16
  ------------------
  |  Branch (286:11): [True: 632, False: 298k]
  ------------------
  287|    632|	{
  288|    632|	  if (domain_u32[it])
  ------------------
  |  Branch (288:8): [True: 632, False: 0]
  ------------------
  289|    632|	    {
  290|    632|	      free (domain_u32);
  291|    632|	      return IDN2_DISALLOWED;
  292|    632|	    }
  293|      0|	  len2++;
  294|      0|	}
  295|   298k|      else if (map_is (&map, TR46_FLG_MAPPED))
  ------------------
  |  |   36|   298k|# define TR46_FLG_MAPPED                  2
  ------------------
  |  Branch (295:16): [True: 116k, False: 182k]
  ------------------
  296|   116k|	{
  297|   116k|	  len2 += map.nmappings;
  298|   116k|	}
  299|   182k|      else if (map_is (&map, TR46_FLG_VALID))
  ------------------
  |  |   35|   182k|# define TR46_FLG_VALID                   1
  ------------------
  |  Branch (299:16): [True: 158k, False: 23.9k]
  ------------------
  300|   158k|	{
  301|   158k|	  len2++;
  302|   158k|	}
  303|  23.9k|      else if (map_is (&map, TR46_FLG_IGNORED))
  ------------------
  |  |   37|  23.9k|# define TR46_FLG_IGNORED                 4
  ------------------
  |  Branch (303:16): [True: 1.92k, False: 22.0k]
  ------------------
  304|  1.92k|	{
  305|  1.92k|	  continue;
  306|  1.92k|	}
  307|  22.0k|      else if (map_is (&map, TR46_FLG_DEVIATION))
  ------------------
  |  |   38|  22.0k|# define TR46_FLG_DEVIATION               8
  ------------------
  |  Branch (307:16): [True: 10.2k, False: 11.7k]
  ------------------
  308|  10.2k|	{
  309|  10.2k|	  if (transitional)
  ------------------
  |  Branch (309:8): [True: 4.77k, False: 5.51k]
  ------------------
  310|  4.77k|	    {
  311|  4.77k|	      len2 += map.nmappings;
  312|  4.77k|	    }
  313|  5.51k|	  else
  314|  5.51k|	    len2++;
  315|  10.2k|	}
  316|  11.7k|      else if (!(flags & IDN2_USE_STD3_ASCII_RULES))
  ------------------
  |  Branch (316:16): [True: 0, False: 11.7k]
  ------------------
  317|      0|	{
  318|      0|	  if (map_is (&map, TR46_FLG_DISALLOWED_STD3_VALID))
  ------------------
  |  |   41|      0|# define TR46_FLG_DISALLOWED_STD3_VALID  64
  ------------------
  |  Branch (318:8): [True: 0, False: 0]
  ------------------
  319|      0|	    {
  320|       |	      /* valid because UseSTD3ASCIIRules=false, see #TR46 5 */
  321|      0|	      len2++;
  322|      0|	    }
  323|      0|	  else if (map_is (&map, TR46_FLG_DISALLOWED_STD3_MAPPED))
  ------------------
  |  |   40|      0|# define TR46_FLG_DISALLOWED_STD3_MAPPED 32
  ------------------
  |  Branch (323:13): [True: 0, False: 0]
  ------------------
  324|      0|	    {
  325|       |	      /* mapped because UseSTD3ASCIIRules=false, see #TR46 5 */
  326|      0|	      len2 += map.nmappings;
  327|      0|	    }
  328|      0|	}
  329|   299k|    }
  330|       |
  331|       |  /* Exit early if result is too long.
  332|       |   * This avoids excessive CPU usage in punycode encoding, which is O(N^2). */
  333|  28.4k|  if (len2 >= IDN2_DOMAIN_MAX_LENGTH)
  ------------------
  |  |  173|  28.4k|# define IDN2_DOMAIN_MAX_LENGTH 255
  ------------------
  |  Branch (333:7): [True: 244, False: 28.1k]
  ------------------
  334|    244|    {
  335|    244|      free (domain_u32);
  336|    244|      return IDN2_TOO_BIG_DOMAIN;
  337|    244|    }
  338|       |
  339|  28.1k|  uint32_t *tmp = (uint32_t *) malloc ((len2 + 1) * sizeof (uint32_t));
  340|  28.1k|  if (!tmp)
  ------------------
  |  Branch (340:7): [True: 0, False: 28.1k]
  ------------------
  341|      0|    {
  342|      0|      free (domain_u32);
  343|      0|      return IDN2_MALLOC;
  344|      0|    }
  345|       |
  346|  28.1k|  len2 = 0;
  347|   288k|  for (it = 0; it < len - 1; it++)
  ------------------
  |  Branch (347:16): [True: 260k, False: 28.1k]
  ------------------
  348|   260k|    {
  349|   260k|      uint32_t c = domain_u32[it];
  350|   260k|      IDNAMap map;
  351|       |
  352|   260k|      get_idna_map (c, &map);
  353|       |
  354|   260k|      if (map_is (&map, TR46_FLG_DISALLOWED))
  ------------------
  |  |   39|   260k|# define TR46_FLG_DISALLOWED             16
  ------------------
  |  Branch (354:11): [True: 0, False: 260k]
  ------------------
  355|      0|	{
  356|      0|	  tmp[len2++] = c;
  357|      0|	}
  358|   260k|      else if (map_is (&map, TR46_FLG_MAPPED))
  ------------------
  |  |   36|   260k|# define TR46_FLG_MAPPED                  2
  ------------------
  |  Branch (358:16): [True: 90.0k, False: 170k]
  ------------------
  359|  90.0k|	{
  360|  90.0k|	  len2 += get_map_data (tmp + len2, &map);
  361|  90.0k|	}
  362|   170k|      else if (map_is (&map, TR46_FLG_VALID))
  ------------------
  |  |   35|   170k|# define TR46_FLG_VALID                   1
  ------------------
  |  Branch (362:16): [True: 147k, False: 22.8k]
  ------------------
  363|   147k|	{
  364|   147k|	  tmp[len2++] = c;
  365|   147k|	}
  366|  22.8k|      else if (map_is (&map, TR46_FLG_IGNORED))
  ------------------
  |  |   37|  22.8k|# define TR46_FLG_IGNORED                 4
  ------------------
  |  Branch (366:16): [True: 1.79k, False: 21.0k]
  ------------------
  367|  1.79k|	{
  368|  1.79k|	  continue;
  369|  1.79k|	}
  370|  21.0k|      else if (map_is (&map, TR46_FLG_DEVIATION))
  ------------------
  |  |   38|  21.0k|# define TR46_FLG_DEVIATION               8
  ------------------
  |  Branch (370:16): [True: 9.76k, False: 11.2k]
  ------------------
  371|  9.76k|	{
  372|  9.76k|	  if (transitional)
  ------------------
  |  Branch (372:8): [True: 4.29k, False: 5.46k]
  ------------------
  373|  4.29k|	    {
  374|  4.29k|	      len2 += get_map_data (tmp + len2, &map);
  375|  4.29k|	    }
  376|  5.46k|	  else
  377|  5.46k|	    tmp[len2++] = c;
  378|  9.76k|	}
  379|  11.2k|      else if (!(flags & IDN2_USE_STD3_ASCII_RULES))
  ------------------
  |  Branch (379:16): [True: 0, False: 11.2k]
  ------------------
  380|      0|	{
  381|      0|	  if (map_is (&map, TR46_FLG_DISALLOWED_STD3_VALID))
  ------------------
  |  |   41|      0|# define TR46_FLG_DISALLOWED_STD3_VALID  64
  ------------------
  |  Branch (381:8): [True: 0, False: 0]
  ------------------
  382|      0|	    {
  383|      0|	      tmp[len2++] = c;
  384|      0|	    }
  385|      0|	  else if (map_is (&map, TR46_FLG_DISALLOWED_STD3_MAPPED))
  ------------------
  |  |   40|      0|# define TR46_FLG_DISALLOWED_STD3_MAPPED 32
  ------------------
  |  Branch (385:13): [True: 0, False: 0]
  ------------------
  386|      0|	    {
  387|      0|	      len2 += get_map_data (tmp + len2, &map);
  388|      0|	    }
  389|      0|	}
  390|   260k|    }
  391|  28.1k|  free (domain_u32);
  392|       |
  393|       |  /* Normalize to NFC */
  394|  28.1k|  tmp[len2] = 0;
  395|  28.1k|  domain_u32 = u32_normalize (UNINORM_NFC, tmp, len2 + 1, NULL, &len);
  ------------------
  |  |  127|  28.1k|#define UNINORM_NFC (&uninorm_nfc)
  ------------------
  396|  28.1k|  free (tmp);
  397|  28.1k|  tmp = NULL;
  398|       |
  399|  28.1k|  if (!domain_u32)
  ------------------
  |  Branch (399:7): [True: 0, False: 28.1k]
  ------------------
  400|      0|    {
  401|      0|      if (errno == ENOMEM)
  ------------------
  |  Branch (401:11): [True: 0, False: 0]
  ------------------
  402|      0|	return IDN2_MALLOC;
  403|      0|      return IDN2_ENCODING_ERROR;
  404|      0|    }
  405|       |
  406|       |  /* split into labels and check */
  407|  28.1k|  uint32_t *e, *s;
  408|  59.5k|  for (e = s = domain_u32; *e; s = e)
  ------------------
  |  Branch (408:28): [True: 34.9k, False: 24.5k]
  ------------------
  409|  34.9k|    {
  410|   391k|      while (*e && *e != '.')
  ------------------
  |  Branch (410:14): [True: 364k, False: 26.7k]
  |  Branch (410:20): [True: 356k, False: 8.21k]
  ------------------
  411|   356k|	e++;
  412|       |
  413|  34.9k|      if (e - s >= 4 && s[0] == 'x' && s[1] == 'n' && s[2] == '-'
  ------------------
  |  Branch (413:11): [True: 19.4k, False: 15.5k]
  |  Branch (413:25): [True: 8.54k, False: 10.9k]
  |  Branch (413:40): [True: 7.59k, False: 951]
  |  Branch (413:55): [True: 7.28k, False: 304]
  ------------------
  414|  34.9k|	  && s[3] == '-')
  ------------------
  |  Branch (414:7): [True: 6.97k, False: 317]
  ------------------
  415|  6.97k|	{
  416|       |	  /* decode punycode and check result non-transitional */
  417|  6.97k|	  size_t ace_len;
  418|  6.97k|	  uint32_t name_u32[IDN2_LABEL_MAX_LENGTH];
  419|  6.97k|	  size_t name_len = IDN2_LABEL_MAX_LENGTH;
  ------------------
  |  |  162|  6.97k|# define IDN2_LABEL_MAX_LENGTH 63
  ------------------
  420|  6.97k|	  uint8_t *ace;
  421|       |
  422|  6.97k|	  ace = u32_to_u8 (s + 4, e - s - 4, NULL, &ace_len);
  423|  6.97k|	  if (!ace)
  ------------------
  |  Branch (423:8): [True: 0, False: 6.97k]
  ------------------
  424|      0|	    {
  425|      0|	      free (domain_u32);
  426|      0|	      if (errno == ENOMEM)
  ------------------
  |  Branch (426:12): [True: 0, False: 0]
  ------------------
  427|      0|		return IDN2_MALLOC;
  428|      0|	      return IDN2_ENCODING_ERROR;
  429|      0|	    }
  430|       |
  431|  6.97k|	  rc = idn2_punycode_decode ((char *) ace, ace_len,
  432|  6.97k|				     name_u32, &name_len);
  433|       |
  434|  6.97k|	  free (ace);
  435|       |
  436|  6.97k|	  if (rc)
  ------------------
  |  Branch (436:8): [True: 3.60k, False: 3.36k]
  ------------------
  437|  3.60k|	    {
  438|  3.60k|	      free (domain_u32);
  439|  3.60k|	      return rc;
  440|  3.60k|	    }
  441|       |
  442|  3.36k|	  test_flags = TR46_NONTRANSITIONAL_CHECK;
  ------------------
  |  |  256|  3.36k|  (TEST_NFC | TEST_2HYPHEN | TEST_HYPHEN_STARTEND | TEST_LEADING_COMBINING | TEST_NONTRANSITIONAL)
  ------------------
  443|       |
  444|  3.36k|	  if (!(flags & IDN2_USE_STD3_ASCII_RULES))
  ------------------
  |  Branch (444:8): [True: 0, False: 3.36k]
  ------------------
  445|      0|	    test_flags |= TEST_ALLOW_STD3_DISALLOWED;
  446|       |
  447|  3.36k|	  if ((rc = _idn2_label_test (test_flags, name_u32, name_len)))
  ------------------
  |  Branch (447:8): [True: 2.19k, False: 1.17k]
  ------------------
  448|  2.19k|	    err = rc;
  449|  3.36k|	}
  450|  27.9k|      else
  451|  27.9k|	{
  452|  27.9k|	  test_flags =
  453|  27.9k|	    transitional ? TR46_TRANSITIONAL_CHECK :
  ------------------
  |  |  254|  11.4k|  (TEST_NFC | TEST_2HYPHEN | TEST_HYPHEN_STARTEND | TEST_LEADING_COMBINING | TEST_TRANSITIONAL)
  ------------------
  |  Branch (453:6): [True: 11.4k, False: 16.5k]
  ------------------
  454|  27.9k|	    TR46_NONTRANSITIONAL_CHECK;
  ------------------
  |  |  256|  44.5k|  (TEST_NFC | TEST_2HYPHEN | TEST_HYPHEN_STARTEND | TEST_LEADING_COMBINING | TEST_NONTRANSITIONAL)
  ------------------
  455|       |
  456|  27.9k|	  if (!(flags & IDN2_USE_STD3_ASCII_RULES))
  ------------------
  |  Branch (456:8): [True: 0, False: 27.9k]
  ------------------
  457|      0|	    test_flags |= TEST_ALLOW_STD3_DISALLOWED;
  458|       |
  459|  27.9k|	  if ((rc = _idn2_label_test (test_flags, s, e - s)))
  ------------------
  |  Branch (459:8): [True: 2.47k, False: 25.5k]
  ------------------
  460|  2.47k|	    err = rc;
  461|  27.9k|	}
  462|       |
  463|  31.3k|      if (*e)
  ------------------
  |  Branch (463:11): [True: 7.88k, False: 23.4k]
  ------------------
  464|  7.88k|	e++;
  465|  31.3k|    }
  466|       |
  467|  24.5k|  if (err == IDN2_OK && out)
  ------------------
  |  Branch (467:7): [True: 20.3k, False: 4.22k]
  |  Branch (467:25): [True: 20.3k, False: 0]
  ------------------
  468|  20.3k|    {
  469|  20.3k|      uint8_t *_out = u32_to_u8 (domain_u32, len, NULL, &len);
  470|  20.3k|      free (domain_u32);
  471|       |
  472|  20.3k|      if (!_out)
  ------------------
  |  Branch (472:11): [True: 0, False: 20.3k]
  ------------------
  473|      0|	{
  474|      0|	  if (errno == ENOMEM)
  ------------------
  |  Branch (474:8): [True: 0, False: 0]
  ------------------
  475|      0|	    return IDN2_MALLOC;
  476|      0|	  return IDN2_ENCODING_ERROR;
  477|      0|	}
  478|       |
  479|  20.3k|      *out = _out;
  480|  20.3k|    }
  481|  4.22k|  else
  482|  4.22k|    free (domain_u32);
  483|       |
  484|  24.5k|  return err;
  485|  24.5k|}
lookup.c:label:
  127|  27.0k|{
  128|  27.0k|  size_t plen;
  129|  27.0k|  uint32_t *p = NULL;
  130|  27.0k|  const uint8_t *src_org = NULL;
  131|  27.0k|  uint8_t *src_allocated = NULL;
  132|  27.0k|  int rc, check_roundtrip = 0;
  133|  27.0k|  size_t tmpl, srclen_org = 0;
  134|  27.0k|  uint32_t label_u32[IDN2_LABEL_MAX_LENGTH];
  135|  27.0k|  size_t label32_len = IDN2_LABEL_MAX_LENGTH;
  ------------------
  |  |  162|  27.0k|# define IDN2_LABEL_MAX_LENGTH 63
  ------------------
  136|       |
  137|  27.0k|  if (_idn2_ascii_p (src, srclen))
  ------------------
  |  Branch (137:7): [True: 5.01k, False: 22.0k]
  ------------------
  138|  5.01k|    {
  139|  5.01k|      if (!(flags & IDN2_NO_ALABEL_ROUNDTRIP) && srclen >= 4
  ------------------
  |  Branch (139:11): [True: 5.01k, False: 0]
  |  Branch (139:50): [True: 2.23k, False: 2.78k]
  ------------------
  140|  5.01k|	  && memcmp (src, "xn--", 4) == 0)
  ------------------
  |  Branch (140:7): [True: 1.16k, False: 1.06k]
  ------------------
  141|  1.16k|	{
  142|       |	  /*
  143|       |	     If the input to this procedure appears to be an A-label
  144|       |	     (i.e., it starts in "xn--", interpreted
  145|       |	     case-insensitively), the lookup application MAY attempt to
  146|       |	     convert it to a U-label, first ensuring that the A-label is
  147|       |	     entirely in lowercase (converting it to lowercase if
  148|       |	     necessary), and apply the tests of Section 5.4 and the
  149|       |	     conversion of Section 5.5 to that form. */
  150|  1.16k|	  rc = idn2_punycode_decode ((char *) src + 4, srclen - 4,
  151|  1.16k|				     label_u32, &label32_len);
  152|  1.16k|	  if (rc)
  ------------------
  |  Branch (152:8): [True: 0, False: 1.16k]
  ------------------
  153|      0|	    return rc;
  154|       |
  155|  1.16k|	  check_roundtrip = 1;
  156|  1.16k|	  src_org = src;
  157|  1.16k|	  srclen_org = srclen;
  158|       |
  159|  1.16k|	  srclen = IDN2_LABEL_MAX_LENGTH;
  ------------------
  |  |  162|  1.16k|# define IDN2_LABEL_MAX_LENGTH 63
  ------------------
  160|  1.16k|	  src = src_allocated =
  161|  1.16k|	    u32_to_u8 (label_u32, label32_len, NULL, &srclen);
  162|  1.16k|	  if (!src)
  ------------------
  |  Branch (162:8): [True: 0, False: 1.16k]
  ------------------
  163|      0|	    {
  164|      0|	      if (errno == ENOMEM)
  ------------------
  |  Branch (164:12): [True: 0, False: 0]
  ------------------
  165|      0|		return IDN2_MALLOC;
  166|      0|	      return IDN2_ENCODING_ERROR;
  167|      0|	    }
  168|  1.16k|	}
  169|  3.84k|      else
  170|  3.84k|	{
  171|  3.84k|	  if (srclen > IDN2_LABEL_MAX_LENGTH)
  ------------------
  |  |  162|  3.84k|# define IDN2_LABEL_MAX_LENGTH 63
  ------------------
  |  Branch (171:8): [True: 639, False: 3.20k]
  ------------------
  172|    639|	    return IDN2_TOO_BIG_LABEL;
  173|  3.20k|	  if (srclen > *dstlen)
  ------------------
  |  Branch (173:8): [True: 0, False: 3.20k]
  ------------------
  174|      0|	    return IDN2_TOO_BIG_DOMAIN;
  175|       |
  176|  3.20k|	  memcpy (dst, src, srclen);
  177|  3.20k|	  *dstlen = srclen;
  178|  3.20k|	  return IDN2_OK;
  179|  3.20k|	}
  180|  5.01k|    }
  181|       |
  182|  23.1k|  rc = _idn2_u8_to_u32_nfc (src, srclen, &p, &plen, flags & IDN2_NFC_INPUT);
  183|  23.1k|  if (rc != IDN2_OK)
  ------------------
  |  Branch (183:7): [True: 0, False: 23.1k]
  ------------------
  184|      0|    goto out;
  185|       |
  186|  23.1k|  if (!(flags & IDN2_TRANSITIONAL))
  ------------------
  |  Branch (186:7): [True: 14.2k, False: 8.93k]
  ------------------
  187|  14.2k|    {
  188|  14.2k|      rc = _idn2_label_test (TEST_NFC |
  189|  14.2k|			     TEST_2HYPHEN |
  190|  14.2k|			     TEST_LEADING_COMBINING |
  191|  14.2k|			     TEST_DISALLOWED |
  192|  14.2k|			     TEST_CONTEXTJ_RULE |
  193|  14.2k|			     TEST_CONTEXTO_WITH_RULE |
  194|  14.2k|			     TEST_UNASSIGNED | TEST_BIDI |
  195|  14.2k|			     ((flags & IDN2_NONTRANSITIONAL) ?
  ------------------
  |  Branch (195:10): [True: 14.2k, False: 0]
  ------------------
  196|  14.2k|			      TEST_NONTRANSITIONAL : 0) | ((flags &
  ------------------
  |  Branch (196:39): [True: 14.2k, False: 0]
  ------------------
  197|  14.2k|							    IDN2_USE_STD3_ASCII_RULES)
  198|  14.2k|							   ? 0 :
  199|  14.2k|							   TEST_ALLOW_STD3_DISALLOWED),
  200|  14.2k|			     p, plen);
  201|       |
  202|  14.2k|      if (rc != IDN2_OK)
  ------------------
  |  Branch (202:11): [True: 6.57k, False: 7.67k]
  ------------------
  203|  6.57k|	goto out;
  204|  14.2k|    }
  205|       |
  206|  16.6k|  dst[0] = 'x';
  207|  16.6k|  dst[1] = 'n';
  208|  16.6k|  dst[2] = '-';
  209|  16.6k|  dst[3] = '-';
  210|       |
  211|  16.6k|  tmpl = *dstlen - 4;
  212|  16.6k|  rc = idn2_punycode_encode (p, plen, (char *) dst + 4, &tmpl);
  213|  16.6k|  if (rc != IDN2_OK)
  ------------------
  |  Branch (213:7): [True: 1.31k, False: 15.2k]
  ------------------
  214|  1.31k|    goto out;
  215|       |
  216|       |
  217|  15.2k|  *dstlen = 4 + tmpl;
  218|       |
  219|  15.2k|  if (check_roundtrip)
  ------------------
  |  Branch (219:7): [True: 885, False: 14.4k]
  ------------------
  220|    885|    {
  221|    885|      if (srclen_org != *dstlen
  ------------------
  |  Branch (221:11): [True: 0, False: 885]
  ------------------
  222|    885|	  || c_strncasecmp ((char *) src_org, (char *) dst, srclen_org))
  ------------------
  |  Branch (222:7): [True: 0, False: 885]
  ------------------
  223|      0|	{
  224|      0|	  rc = IDN2_ALABEL_ROUNDTRIP_FAILED;
  225|      0|	  goto out;
  226|      0|	}
  227|    885|    }
  228|  14.4k|  else if (!(flags & IDN2_NO_ALABEL_ROUNDTRIP))
  ------------------
  |  Branch (228:12): [True: 14.4k, False: 0]
  ------------------
  229|  14.4k|    {
  230|  14.4k|      rc = idn2_punycode_decode ((char *) dst + 4, *dstlen - 4,
  231|  14.4k|				 label_u32, &label32_len);
  232|  14.4k|      if (rc)
  ------------------
  |  Branch (232:11): [True: 0, False: 14.4k]
  ------------------
  233|      0|	{
  234|      0|	  rc = IDN2_ALABEL_ROUNDTRIP_FAILED;
  235|      0|	  goto out;
  236|      0|	}
  237|       |
  238|  14.4k|      if (plen != label32_len || u32_cmp (p, label_u32, label32_len))
  ------------------
  |  Branch (238:11): [True: 0, False: 14.4k]
  |  Branch (238:34): [True: 0, False: 14.4k]
  ------------------
  239|      0|	{
  240|      0|	  rc = IDN2_ALABEL_ROUNDTRIP_FAILED;
  241|      0|	  goto out;
  242|      0|	}
  243|  14.4k|    }
  244|       |
  245|  15.2k|  rc = IDN2_OK;
  246|       |
  247|  23.1k|out:
  248|  23.1k|  free (p);
  249|  23.1k|  free (src_allocated);
  250|  23.1k|  return rc;
  251|  15.2k|}
lookup.c:c_strncasecmp:
   71|    885|{
   72|    885|  register const unsigned char *p1 = (const unsigned char *) s1;
   73|    885|  register const unsigned char *p2 = (const unsigned char *) s2;
   74|    885|  unsigned char c1, c2;
   75|       |
   76|    885|  if (p1 == p2 || n == 0)
  ------------------
  |  Branch (76:7): [True: 0, False: 885]
  |  Branch (76:19): [True: 0, False: 885]
  ------------------
   77|      0|    return 0;
   78|       |
   79|    885|  do
   80|  15.3k|    {
   81|  15.3k|      c1 = c_tolower (*p1);
   82|  15.3k|      c2 = c_tolower (*p2);
   83|       |
   84|  15.3k|      if (--n == 0 || c1 == '\0')
  ------------------
  |  Branch (84:11): [True: 885, False: 14.4k]
  |  Branch (84:23): [True: 0, False: 14.4k]
  ------------------
   85|    885|	break;
   86|       |
   87|  14.4k|      ++p1;
   88|  14.4k|      ++p2;
   89|  14.4k|    }
   90|  14.4k|  while (c1 == c2);
  ------------------
  |  Branch (90:10): [True: 14.4k, False: 0]
  ------------------
   91|       |
   92|    885|  if (UCHAR_MAX <= INT_MAX)
  ------------------
  |  Branch (92:7): [Folded - Ignored]
  ------------------
   93|    885|    return c1 - c2;
   94|      0|  else
   95|       |    /* On machines where 'char' and 'int' are types of the same size, the
   96|       |       difference of two 'unsigned char' values - including the sign bit -
   97|       |       doesn't fit in an 'int'.  */
   98|      0|    return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0);
  ------------------
  |  Branch (98:13): [True: 0, False: 0]
  |  Branch (98:27): [True: 0, False: 0]
  ------------------
   99|    885|}
lookup.c:c_tolower:
   59|  30.6k|{
   60|  30.6k|  switch (c)
   61|  30.6k|    {
   62|      0|    _C_CTYPE_UPPER:
  ------------------
  |  |   56|      0|# define _C_CTYPE_UPPER _C_CTYPE_LOWER_N ('A' - 'a')
  |  |  ------------------
  |  |  |  |   49|      0|   case 'a' + (N): case 'b' + (N): case 'c' + (N): case 'd' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:4): [True: 0, False: 30.6k]
  |  |  |  |  |  Branch (49:20): [True: 0, False: 30.6k]
  |  |  |  |  |  Branch (49:36): [True: 0, False: 30.6k]
  |  |  |  |  |  Branch (49:52): [True: 0, False: 30.6k]
  |  |  |  |  ------------------
  |  |  |  |   50|      0|   case 'e' + (N): case 'f' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:4): [True: 0, False: 30.6k]
  |  |  |  |  |  Branch (50:20): [True: 0, False: 30.6k]
  |  |  |  |  ------------------
  |  |  |  |   51|      0|   case 'g' + (N): case 'h' + (N): case 'i' + (N): case 'j' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:4): [True: 0, False: 30.6k]
  |  |  |  |  |  Branch (51:20): [True: 0, False: 30.6k]
  |  |  |  |  |  Branch (51:36): [True: 0, False: 30.6k]
  |  |  |  |  |  Branch (51:52): [True: 0, False: 30.6k]
  |  |  |  |  ------------------
  |  |  |  |   52|      0|   case 'k' + (N): case 'l' + (N): case 'm' + (N): case 'n' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:4): [True: 0, False: 30.6k]
  |  |  |  |  |  Branch (52:20): [True: 0, False: 30.6k]
  |  |  |  |  |  Branch (52:36): [True: 0, False: 30.6k]
  |  |  |  |  |  Branch (52:52): [True: 0, False: 30.6k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|   case 'o' + (N): case 'p' + (N): case 'q' + (N): case 'r' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (53:4): [True: 0, False: 30.6k]
  |  |  |  |  |  Branch (53:20): [True: 0, False: 30.6k]
  |  |  |  |  |  Branch (53:36): [True: 0, False: 30.6k]
  |  |  |  |  |  Branch (53:52): [True: 0, False: 30.6k]
  |  |  |  |  ------------------
  |  |  |  |   54|      0|   case 's' + (N): case 't' + (N): case 'u' + (N): case 'v' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (54:4): [True: 0, False: 30.6k]
  |  |  |  |  |  Branch (54:20): [True: 0, False: 30.6k]
  |  |  |  |  |  Branch (54:36): [True: 0, False: 30.6k]
  |  |  |  |  |  Branch (54:52): [True: 0, False: 30.6k]
  |  |  |  |  ------------------
  |  |  |  |   55|      0|   case 'w' + (N): case 'x' + (N): case 'y' + (N): case 'z' + (N)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:4): [True: 0, False: 30.6k]
  |  |  |  |  |  Branch (55:20): [True: 0, False: 30.6k]
  |  |  |  |  |  Branch (55:36): [True: 0, False: 30.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   63|      0|      return c - 'A' + 'a';
   64|  30.6k|    default:
  ------------------
  |  Branch (64:5): [True: 30.6k, False: 0]
  ------------------
   65|  30.6k|      return c;
   66|  30.6k|    }
   67|  30.6k|}

idn2_punycode_encode:
  159|  16.6k|{
  160|  16.6k|  uint32_t our_input_length, n, delta, h, b, bias, j, m, q, k, t;
  161|  16.6k|  size_t out, max_out;
  162|       |
  163|       |  /* The Punycode spec assumes that the input length is the same type */
  164|       |  /* of integer as a code point, so we need to convert the size_t to  */
  165|       |  /* a uint32_t, which could overflow.                           */
  166|       |
  167|  16.6k|  if (input_length > UINT32_MAX)
  ------------------
  |  Branch (167:7): [True: 0, False: 16.6k]
  ------------------
  168|      0|    return IDN2_PUNYCODE_OVERFLOW;
  169|  16.6k|  our_input_length = (uint32_t) input_length;
  170|       |
  171|       |  /* Initialize the state: */
  172|       |
  173|  16.6k|  n = initial_n;
  174|  16.6k|  delta = 0;
  175|  16.6k|  out = 0;
  176|  16.6k|  max_out = *output_length;
  177|  16.6k|  bias = initial_bias;
  178|       |
  179|       |  /* Handle the basic code points: */
  180|       |
  181|   165k|  for (j = 0; j < our_input_length; ++j)
  ------------------
  |  Branch (181:15): [True: 149k, False: 16.3k]
  ------------------
  182|   149k|    {
  183|   149k|      if (encode_basic (input[j]))
  ------------------
  |  |   76|   149k|#define encode_basic(cp) ((uint32_t)(cp) < 0x80)
  |  |  ------------------
  |  |  |  Branch (76:26): [True: 35.4k, False: 113k]
  |  |  ------------------
  ------------------
  184|  35.4k|	{
  185|  35.4k|	  if (max_out - out < 2)
  ------------------
  |  Branch (185:8): [True: 266, False: 35.1k]
  ------------------
  186|    266|	    return IDN2_PUNYCODE_BIG_OUTPUT;
  187|  35.1k|	  output[out++] = (char) input[j];
  188|  35.1k|	}
  189|   113k|      else if (input[j] > 0x10FFFF
  ------------------
  |  Branch (189:16): [True: 0, False: 113k]
  ------------------
  190|   113k|	       || (input[j] >= 0xD800 && input[j] <= 0xDBFF))
  ------------------
  |  Branch (190:13): [True: 2.38k, False: 111k]
  |  Branch (190:35): [True: 0, False: 2.38k]
  ------------------
  191|      0|	return IDN2_PUNYCODE_BAD_INPUT;
  192|   149k|    }
  193|       |
  194|  16.3k|  h = b = (uint32_t) out;
  195|       |  /* cannot overflow because out <= our_input_length <= UINT32_MAX */
  196|       |
  197|       |  /* h is the number of code points that have been handled, b is the  */
  198|       |  /* number of basic code points, and out is the number of ASCII code */
  199|       |  /* points that have been output.                                    */
  200|       |
  201|  16.3k|  if (b > 0)
  ------------------
  |  Branch (201:7): [True: 5.23k, False: 11.1k]
  ------------------
  202|  5.23k|    output[out++] = delimiter;
  203|       |
  204|       |  /* Main encoding loop: */
  205|       |
  206|  87.9k|  while (h < our_input_length)
  ------------------
  |  Branch (206:10): [True: 72.6k, False: 15.2k]
  ------------------
  207|  72.6k|    {
  208|       |      /* All non-basic code points < n have been     */
  209|       |      /* handled already.  Find the next larger one: */
  210|       |
  211|   947k|      for (m = UINT32_MAX, j = 0; j < our_input_length; ++j)
  ------------------
  |  Branch (211:35): [True: 874k, False: 72.6k]
  ------------------
  212|   874k|	{
  213|       |	  /* if (basic(input[j])) continue; */
  214|       |	  /* (not needed for Punycode) */
  215|   874k|	  if (input[j] >= n && input[j] < m)
  ------------------
  |  Branch (215:8): [True: 473k, False: 401k]
  |  Branch (215:25): [True: 209k, False: 263k]
  ------------------
  216|   209k|	    m = input[j];
  217|   874k|	}
  218|       |
  219|       |      /* Increase delta enough to advance the decoder's    */
  220|       |      /* <n,i> state to <m,0>, but guard against overflow: */
  221|       |
  222|  72.6k|      if (m - n > (UINT32_MAX - delta) / (h + 1))
  ------------------
  |  Branch (222:11): [True: 0, False: 72.6k]
  ------------------
  223|      0|	return IDN2_PUNYCODE_OVERFLOW;
  224|  72.6k|      delta += (m - n) * (h + 1);
  225|  72.6k|      n = m;
  226|       |
  227|   931k|      for (j = 0; j < our_input_length; ++j)
  ------------------
  |  Branch (227:19): [True: 859k, False: 71.5k]
  ------------------
  228|   859k|	{
  229|       |	  /* Punycode does not need to check whether input[j] is basic: */
  230|   859k|	  if (input[j] < n /* || basic(input[j]) */ )
  ------------------
  |  Branch (230:8): [True: 389k, False: 469k]
  ------------------
  231|   389k|	    {
  232|   389k|	      if (++delta == 0)
  ------------------
  |  Branch (232:12): [True: 0, False: 389k]
  ------------------
  233|      0|		return IDN2_PUNYCODE_OVERFLOW;
  234|   389k|	    }
  235|       |
  236|   859k|	  if (input[j] == n)
  ------------------
  |  Branch (236:8): [True: 103k, False: 756k]
  ------------------
  237|   103k|	    {
  238|       |	      /* Represent delta as a generalized variable-length integer: */
  239|       |
  240|   141k|	      for (q = delta, k = base;; k += base)
  241|   245k|		{
  242|   245k|		  if (out >= max_out)
  ------------------
  |  Branch (242:9): [True: 1.04k, False: 243k]
  ------------------
  243|  1.04k|		    return IDN2_PUNYCODE_BIG_OUTPUT;
  244|   243k|		  t = k <= bias /* + tmin */ ? tmin :	/* +tmin not needed */
  ------------------
  |  Branch (244:9): [True: 65.3k, False: 178k]
  ------------------
  245|   243k|		    k >= bias + tmax ? tmax : k - bias;
  ------------------
  |  Branch (245:7): [True: 142k, False: 36.2k]
  ------------------
  246|   243k|		  if (q < t)
  ------------------
  |  Branch (246:9): [True: 102k, False: 141k]
  ------------------
  247|   102k|		    break;
  248|   141k|		  output[out++] = encode_digit (t + (q - t) % (base - t), 0);
  249|   141k|		  q = (q - t) / (base - t);
  250|   141k|		}
  251|       |
  252|   102k|	      output[out++] = encode_digit (q, 0);
  253|   102k|	      bias = adapt (delta, h + 1, h == b);
  254|   102k|	      delta = 0;
  255|   102k|	      ++h;
  256|   102k|	    }
  257|   859k|	}
  258|       |
  259|  71.5k|      ++delta, ++n;
  260|  71.5k|    }
  261|       |
  262|  15.2k|  *output_length = out;
  263|  15.2k|  return IDN2_OK;
  264|  16.3k|}
idn2_punycode_decode:
  299|  22.5k|{
  300|  22.5k|  uint32_t n, out = 0, i, max_out, bias, oldi, w, k, digit, t;
  301|  22.5k|  size_t b = 0, j, in;
  302|       |
  303|  22.5k|  if (!input_length)
  ------------------
  |  Branch (303:7): [True: 244, False: 22.3k]
  ------------------
  304|    244|    return IDN2_PUNYCODE_BAD_INPUT;
  305|       |
  306|       |  /* Check that all chars are basic */
  307|   312k|  for (j = 0; j < input_length; ++j)
  ------------------
  |  Branch (307:15): [True: 291k, False: 21.1k]
  ------------------
  308|   291k|    {
  309|   291k|      if (!decode_basic (input[j]))
  ------------------
  |  |   94|   291k|  ((cp >= 'a' && cp <= 'z') || (cp >= '0' && cp <='9')		\
  |  |  ------------------
  |  |  |  Branch (94:5): [True: 208k, False: 82.4k]
  |  |  |  Branch (94:18): [True: 208k, False: 0]
  |  |  |  Branch (94:33): [True: 71.8k, False: 10.5k]
  |  |  |  Branch (94:46): [True: 71.8k, False: 0]
  |  |  ------------------
  |  |   95|   291k|   || (cp >= 'A' && cp <='Z') || cp == '-' || cp == '_')
  |  |  ------------------
  |  |  |  Branch (95:8): [True: 0, False: 10.5k]
  |  |  |  Branch (95:21): [True: 0, False: 0]
  |  |  |  Branch (95:34): [True: 9.37k, False: 1.17k]
  |  |  |  Branch (95:47): [True: 0, False: 1.17k]
  |  |  ------------------
  ------------------
  310|  1.17k|	return IDN2_PUNYCODE_BAD_INPUT;
  311|   290k|      if (input[j] == delimiter)
  ------------------
  |  Branch (311:11): [True: 9.37k, False: 280k]
  ------------------
  312|  9.37k|	b = j;
  313|   290k|    }
  314|       |
  315|  21.1k|  max_out =
  316|  21.1k|    *output_length > UINT32_MAX ? UINT32_MAX : (uint32_t) * output_length;
  ------------------
  |  Branch (316:5): [True: 0, False: 21.1k]
  ------------------
  317|       |
  318|  21.1k|  if (input[b] == delimiter)
  ------------------
  |  Branch (318:7): [True: 6.00k, False: 15.1k]
  ------------------
  319|  6.00k|    {
  320|       |      /* do not accept leading or trailing delimiter
  321|       |       *   - leading delim must be omitted if there is no ASCII char in u-label
  322|       |       *   - trailing delim means there where no non-ASCII chars in u-label
  323|       |       */
  324|  6.00k|      if (!b || b == input_length - 1)
  ------------------
  |  Branch (324:11): [True: 218, False: 5.78k]
  |  Branch (324:17): [True: 220, False: 5.56k]
  ------------------
  325|    438|	return IDN2_PUNYCODE_BAD_INPUT;
  326|       |
  327|  5.56k|      if (b >= max_out)
  ------------------
  |  Branch (327:11): [True: 222, False: 5.34k]
  ------------------
  328|    222|	return IDN2_PUNYCODE_BIG_OUTPUT;
  329|       |
  330|       |      /* Check that all chars before last delimiter are basic chars */
  331|       |      /* and copy the first b code points to the output. */
  332|  28.0k|      for (j = 0; j < b; j++)
  ------------------
  |  Branch (332:19): [True: 22.7k, False: 5.34k]
  ------------------
  333|  22.7k|	output[out++] = input[j];
  334|       |
  335|  5.34k|      b += 1;			/* advance to non-basic char encoding */
  336|  5.34k|    }
  337|       |
  338|       |  /* Initialize the state: */
  339|  20.4k|  n = initial_n;
  340|  20.4k|  i = 0;
  341|  20.4k|  bias = initial_bias;
  342|       |
  343|       |  /* Main decoding loop:  Start just after the last delimiter if any  */
  344|       |  /* basic code points were copied; start at the beginning otherwise. */
  345|   132k|  for (in = b; in < input_length; ++out)
  ------------------
  |  Branch (345:16): [True: 113k, False: 18.9k]
  ------------------
  346|   113k|    {
  347|       |
  348|       |      /* in is the index of the next ASCII code point to be consumed, */
  349|       |      /* and out is the number of code points in the output array.    */
  350|       |
  351|       |      /* Decode a generalized variable-length integer into delta,  */
  352|       |      /* which gets added to i.  The overflow checking is easier   */
  353|       |      /* if we increase i as we go, then subtract off its starting */
  354|       |      /* value at the end to obtain delta.                         */
  355|   130k|      for (oldi = i, w = 1, k = base;; k += base)
  356|   244k|	{
  357|   244k|	  if (in >= input_length)
  ------------------
  |  Branch (357:8): [True: 223, False: 244k]
  ------------------
  358|    223|	    return IDN2_PUNYCODE_BAD_INPUT;
  359|   244k|	  digit = decode_digit (input[in++]);
  360|   244k|	  if (digit >= base)
  ------------------
  |  Branch (360:8): [True: 0, False: 244k]
  ------------------
  361|      0|	    return IDN2_PUNYCODE_BAD_INPUT;
  362|   244k|	  if (digit > (UINT32_MAX - i) / w)
  ------------------
  |  Branch (362:8): [True: 569, False: 243k]
  ------------------
  363|    569|	    return IDN2_PUNYCODE_OVERFLOW;
  364|   243k|	  i += digit * w;
  365|   243k|	  t = k <= bias /* + tmin */ ? tmin :	/* +tmin not needed */
  ------------------
  |  Branch (365:8): [True: 67.3k, False: 176k]
  ------------------
  366|   243k|	    k >= bias + tmax ? tmax : k - bias;
  ------------------
  |  Branch (366:6): [True: 144k, False: 31.8k]
  ------------------
  367|   243k|	  if (digit < t)
  ------------------
  |  Branch (367:8): [True: 112k, False: 130k]
  ------------------
  368|   112k|	    break;
  369|   130k|	  if (w > UINT32_MAX / (base - t))
  ------------------
  |  Branch (369:8): [True: 0, False: 130k]
  ------------------
  370|      0|	    return IDN2_PUNYCODE_OVERFLOW;
  371|   130k|	  w *= (base - t);
  372|   130k|	}
  373|       |
  374|   112k|      bias = adapt (i - oldi, out + 1, oldi == 0);
  375|       |
  376|       |      /* i was supposed to wrap around from out+1 to 0,   */
  377|       |      /* incrementing n each time, so we'll fix that now: */
  378|   112k|      if (i / (out + 1) > UINT32_MAX - n)
  ------------------
  |  Branch (378:11): [True: 0, False: 112k]
  ------------------
  379|      0|	return IDN2_PUNYCODE_OVERFLOW;
  380|   112k|      n += i / (out + 1);
  381|   112k|      if (n > 0x10FFFF || (n >= 0xD800 && n <= 0xDBFF))
  ------------------
  |  Branch (381:11): [True: 279, False: 112k]
  |  Branch (381:28): [True: 5.50k, False: 106k]
  |  Branch (381:43): [True: 229, False: 5.27k]
  ------------------
  382|    508|	return IDN2_PUNYCODE_BAD_INPUT;
  383|   112k|      i %= (out + 1);
  384|       |
  385|       |      /* Insert n at position i of the output: */
  386|       |
  387|       |      /* not needed for Punycode: */
  388|       |      /* if (basic(n)) return IDN2_PUNYCODE_BAD_INPUT; */
  389|   112k|      if (out >= max_out)
  ------------------
  |  Branch (389:11): [True: 222, False: 111k]
  ------------------
  390|    222|	return IDN2_PUNYCODE_BIG_OUTPUT;
  391|       |
  392|   111k|      memmove (output + i + 1, output + i, (out - i) * sizeof *output);
  393|   111k|      output[i++] = n;
  394|   111k|    }
  395|       |
  396|  18.9k|  *output_length = (size_t) out;
  397|       |  /* cannot overflow because out <= old value of *output_length */
  398|  18.9k|  return IDN2_OK;
  399|  20.4k|}
punycode.c:encode_digit:
   86|   243k|{
   87|   243k|  return d + 22 + 75 * (d < 26) - ((flag != 0) << 5);
   88|       |  /*  0..25 map to ASCII a..z or A..Z */
   89|       |  /* 26..35 map to ASCII 0..9         */
   90|   243k|}
punycode.c:adapt:
  121|   214k|{
  122|   214k|  uint32_t k;
  123|       |
  124|   214k|  delta = firsttime ? delta / damp : delta >> 1;
  ------------------
  |  Branch (124:11): [True: 36.0k, False: 178k]
  ------------------
  125|       |  /* delta >> 1 is a faster way of doing delta / 2 */
  126|   214k|  delta += delta / numpoints;
  127|       |
  128|   296k|  for (k = 0; delta > ((base - tmin) * tmax) / 2; k += base)
  ------------------
  |  Branch (128:15): [True: 81.9k, False: 214k]
  ------------------
  129|  81.9k|    {
  130|  81.9k|      delta /= base - tmin;
  131|  81.9k|    }
  132|       |
  133|   214k|  return k + (base - tmin + 1) * delta / (delta + skew);
  134|   214k|}
punycode.c:decode_digit:
  103|   244k|{
  104|   244k|  if (cp >= 'a' && cp <= 'z')
  ------------------
  |  Branch (104:7): [True: 177k, False: 66.8k]
  |  Branch (104:20): [True: 177k, False: 0]
  ------------------
  105|   177k|    return cp - 'a';
  106|  66.8k|  if (cp >= '0' && cp <= '9')
  ------------------
  |  Branch (106:7): [True: 66.8k, False: 0]
  |  Branch (106:20): [True: 66.8k, False: 0]
  ------------------
  107|  66.8k|    return cp - '0' + 26;
  108|      0|  if (cp >= 'A' && cp <= 'Z')
  ------------------
  |  Branch (108:7): [True: 0, False: 0]
  |  Branch (108:20): [True: 0, False: 0]
  ------------------
  109|      0|    return cp - 'A';
  110|       |
  111|      0|  return 0;
  112|      0|}

_idn2_disallowed_p:
   68|  89.5k|{
   69|  89.5k|  return property (cp) == DISALLOWED;
   70|  89.5k|}
_idn2_contextj_p:
   74|  79.7k|{
   75|  79.7k|  return property (cp) == CONTEXTJ;
   76|  79.7k|}
_idn2_contexto_p:
   80|  73.0k|{
   81|  73.0k|  return property (cp) == CONTEXTO;
   82|  73.0k|}
_idn2_unassigned_p:
   86|  73.0k|{
   87|  73.0k|  return property (cp) == UNASSIGNED;
   88|  73.0k|}
tables.c:property:
   52|   315k|{
   53|   315k|  const struct idna_table *result;
   54|   315k|  struct idna_table key;
   55|       |
   56|   315k|  key.start = cp;
   57|       |
   58|   315k|  result = (struct idna_table *)
   59|   315k|    bsearch (&key, idna_table, idna_table_size,
   60|   315k|	     sizeof (struct idna_table),
   61|   315k|	     (int (*)(const void *, const void *)) _compare);
   62|       |
   63|   315k|  return result ? result->state : UNASSIGNED;
  ------------------
  |  Branch (63:10): [True: 315k, False: 0]
  ------------------
   64|   315k|}
tables.c:_compare:
   39|  3.50M|{
   40|  3.50M|  if (m1->start < m2->start)
  ------------------
  |  Branch (40:7): [True: 2.37M, False: 1.12M]
  ------------------
   41|  2.37M|    return -1;
   42|  1.12M|  if (m1->start > m2->end)
  ------------------
  |  Branch (42:7): [True: 810k, False: 315k]
  ------------------
   43|   810k|    return 1;
   44|   315k|  return 0;
   45|  1.12M|}

get_idna_map:
  106|   866k|{
  107|   866k|  uint8_t *p;
  108|       |
  109|   866k|  if (c <= 0xFF)
  ------------------
  |  Branch (109:7): [True: 485k, False: 381k]
  ------------------
  110|   485k|    p =
  111|   485k|      (uint8_t *) bsearch (&c, idna_map_8, sizeof (idna_map_8) / 5, 5,
  112|   485k|			   (int (*)(const void *, const void *))
  113|   485k|			   _compare_idna_map);
  114|   381k|  else if (c <= 0xFFFF)
  ------------------
  |  Branch (114:12): [True: 371k, False: 9.77k]
  ------------------
  115|   371k|    p =
  116|   371k|      (uint8_t *) bsearch (&c, idna_map_16, sizeof (idna_map_16) / 7, 7,
  117|   371k|			   (int (*)(const void *, const void *))
  118|   371k|			   _compare_idna_map);
  119|  9.77k|  else if (c <= 0xFFFFFF)
  ------------------
  |  Branch (119:12): [True: 9.77k, False: 0]
  ------------------
  120|  9.77k|    p =
  121|  9.77k|      (uint8_t *) bsearch (&c, idna_map_24, sizeof (idna_map_24) / 8, 8,
  122|  9.77k|			   (int (*)(const void *, const void *))
  123|  9.77k|			   _compare_idna_map);
  124|      0|  else
  125|      0|    p = NULL;
  126|       |
  127|   866k|  if (!p)
  ------------------
  |  Branch (127:7): [True: 0, False: 866k]
  ------------------
  128|      0|    {
  129|      0|      memset (map, 0, sizeof (IDNAMap));
  130|      0|      return -1;
  131|      0|    }
  132|       |
  133|   866k|  _fill_map (c, p, map);
  134|   866k|  return 0;
  135|   866k|}
map_is:
  139|  1.87M|{
  140|  1.87M|  return (idna_flags[map->flag_index] & flags) == flags;
  141|  1.87M|}
get_map_data:
  165|  94.3k|{
  166|  94.3k|  int n = map->nmappings;
  167|  94.3k|  const uint8_t *src = mapdata + map->offset;
  168|       |
  169|   307k|  for (; n > 0; n--)
  ------------------
  |  Branch (169:10): [True: 212k, False: 94.3k]
  ------------------
  170|   212k|    {
  171|   212k|      uint32_t cp = 0;
  172|   212k|      do
  173|   361k|	cp = (cp << 7) | (*src & 0x7F);
  174|   361k|      while (*src++ & 0x80);
  ------------------
  |  Branch (174:14): [True: 148k, False: 212k]
  ------------------
  175|   212k|      *dst++ = cp;
  176|   212k|    }
  177|       |
  178|  94.3k|  return map->nmappings;
  179|  94.3k|}
tr46map.c:_compare_idna_map:
   74|  7.70M|{
   75|  7.70M|  IDNAMap map;
   76|       |
   77|  7.70M|  _fill_map (*c, p, &map);
   78|       |
   79|  7.70M|  if (*c < map.cp1)
  ------------------
  |  Branch (79:7): [True: 4.24M, False: 3.46M]
  ------------------
   80|  4.24M|    return -1;
   81|  3.46M|  if (*c > map.cp1 + map.range)
  ------------------
  |  Branch (81:7): [True: 2.59M, False: 866k]
  ------------------
   82|  2.59M|    return 1;
   83|   866k|  return 0;
   84|  3.46M|}
tr46map.c:_fill_map:
   42|  8.56M|{
   43|  8.56M|  uint32_t value;
   44|       |
   45|  8.56M|  if (c <= 0xFF)
  ------------------
  |  Branch (45:7): [True: 3.67M, False: 4.89M]
  ------------------
   46|  3.67M|    {
   47|  3.67M|      map->cp1 = *p++;
   48|  3.67M|      map->range = *p++;
   49|  3.67M|    }
   50|  4.89M|  else if (c <= 0xFFFF)
  ------------------
  |  Branch (50:12): [True: 4.78M, False: 113k]
  ------------------
   51|  4.78M|    {
   52|  4.78M|      map->cp1 = (p[0] << 8) | p[1];
   53|  4.78M|      map->range = (p[2] << 8) | p[3];
   54|  4.78M|      p += 4;
   55|  4.78M|    }
   56|   113k|  else
   57|   113k|    {
   58|   113k|      map->cp1 = (p[0] << 16) | (p[1] << 8) | p[2];
   59|   113k|      map->range = (p[3] << 8) | p[4];
   60|   113k|      p += 5;
   61|   113k|    }
   62|       |
   63|  8.56M|  value = (p[0] << 16) | (p[1] << 8) | p[2];
   64|       |
   65|       |  /* deconstruct value, construction was
   66|       |   *   value = (((map->nmappings << 14) | map->offset) << 3) | map->flag_index; */
   67|  8.56M|  map->flag_index = value & 0x7;
   68|  8.56M|  map->offset = (value >> 3) & 0x3FFF;
   69|  8.56M|  map->nmappings = (value >> 17) & 0x1F;
   70|  8.56M|}

uc_bidi_class:
   28|  79.5k|{
   29|  79.5k|  unsigned int index1 = uc >> bidi_category_header_0;
  ------------------
  |  |   20|  79.5k|#define bidi_category_header_0 16
  ------------------
   30|  79.5k|  if (index1 < bidi_category_header_1)
  ------------------
  |  |   21|  79.5k|#define bidi_category_header_1 17
  ------------------
  |  Branch (30:7): [True: 79.5k, False: 0]
  ------------------
   31|  79.5k|    {
   32|  79.5k|      int lookup1 = u_bidi_category.level1[index1];
   33|  79.5k|      if (lookup1 >= 0)
  ------------------
  |  Branch (33:11): [True: 79.5k, False: 0]
  ------------------
   34|  79.5k|        {
   35|  79.5k|          unsigned int index2 = (uc >> bidi_category_header_2) & bidi_category_header_3;
  ------------------
  |  |   22|  79.5k|#define bidi_category_header_2 7
  ------------------
                        unsigned int index2 = (uc >> bidi_category_header_2) & bidi_category_header_3;
  ------------------
  |  |   23|  79.5k|#define bidi_category_header_3 511
  ------------------
   36|  79.5k|          int lookup2 = u_bidi_category.level2[lookup1 + index2];
   37|  79.5k|          if (lookup2 >= 0)
  ------------------
  |  Branch (37:15): [True: 62.4k, False: 17.0k]
  ------------------
   38|  62.4k|            {
   39|  62.4k|              unsigned int index3 = ((uc & bidi_category_header_4) + lookup2) * 5;
  ------------------
  |  |   24|  62.4k|#define bidi_category_header_4 127
  ------------------
   40|       |              /* level3 contains 5-bit values, packed into 16-bit words.  */
   41|  62.4k|              unsigned int lookup3 =
   42|  62.4k|                (((unsigned int) u_bidi_category.level3[index3>>4]
   43|  62.4k|                  | ((unsigned int) u_bidi_category.level3[(index3>>4)+1] << 16))
   44|  62.4k|                 >> (index3 % 16))
   45|  62.4k|                & 0x1f;
   46|       |
   47|  62.4k|              return lookup3;
   48|  62.4k|            }
   49|  79.5k|        }
   50|  79.5k|    }
   51|  17.0k|  return UC_BIDI_L;
   52|  79.5k|}
uc_bidi_category:
   56|  79.5k|{
   57|  79.5k|  return uc_bidi_class (uc);
   58|  79.5k|}

uc_joining_type:
   28|  3.38k|{
   29|  3.38k|  unsigned int index1 = uc >> joining_type_header_0;
  ------------------
  |  |   20|  3.38k|#define joining_type_header_0 16
  ------------------
   30|  3.38k|  if (index1 < joining_type_header_1)
  ------------------
  |  |   21|  3.38k|#define joining_type_header_1 2
  ------------------
  |  Branch (30:7): [True: 3.11k, False: 264]
  ------------------
   31|  3.11k|    {
   32|  3.11k|      int lookup1 = u_joining_type.level1[index1];
   33|  3.11k|      if (lookup1 >= 0)
  ------------------
  |  Branch (33:11): [True: 3.11k, False: 0]
  ------------------
   34|  3.11k|        {
   35|  3.11k|          unsigned int index2 = (uc >> joining_type_header_2) & joining_type_header_3;
  ------------------
  |  |   22|  3.11k|#define joining_type_header_2 7
  ------------------
                        unsigned int index2 = (uc >> joining_type_header_2) & joining_type_header_3;
  ------------------
  |  |   23|  3.11k|#define joining_type_header_3 511
  ------------------
   36|  3.11k|          int lookup2 = u_joining_type.level2[lookup1 + index2];
   37|  3.11k|          if (lookup2 >= 0)
  ------------------
  |  Branch (37:15): [True: 1.41k, False: 1.70k]
  ------------------
   38|  1.41k|            {
   39|  1.41k|              unsigned int index3 = (uc & joining_type_header_4) + lookup2;
  ------------------
  |  |   24|  1.41k|#define joining_type_header_4 127
  ------------------
   40|       |              /* level3 contains 4-bit values.  */
   41|  1.41k|              unsigned int lookup3 =
   42|  1.41k|                (u_joining_type.level3[index3>>1] >> ((index3 % 2) * 4))
   43|  1.41k|                & 0x0f;
   44|       |
   45|  1.41k|              if (lookup3 != 0x0f)
  ------------------
  |  Branch (45:19): [True: 1.06k, False: 350]
  ------------------
   46|  1.06k|                return lookup3;
   47|  1.41k|            }
   48|  3.11k|        }
   49|  3.11k|    }
   50|  2.31k|  if (uc_is_general_category_withtable
  ------------------
  |  Branch (50:7): [True: 1.27k, False: 1.04k]
  ------------------
   51|  2.31k|       (uc, UC_CATEGORY_MASK_Mn | UC_CATEGORY_MASK_Me | UC_CATEGORY_MASK_Cf))
   52|  1.27k|    return UC_JOINING_TYPE_T;
   53|  1.04k|  return UC_JOINING_TYPE_U;
   54|  2.31k|}

u32_cmp:
   33|  14.4k|{
   34|  92.5k|  for (; n > 0;)
  ------------------
  |  Branch (34:10): [True: 78.1k, False: 14.4k]
  ------------------
   35|  78.1k|    {
   36|  78.1k|      uint32_t uc1 = *s1++;
   37|  78.1k|      uint32_t uc2 = *s2++;
   38|  78.1k|      if (uc1 == uc2)
  ------------------
  |  Branch (38:11): [True: 78.1k, False: 0]
  ------------------
   39|  78.1k|        {
   40|  78.1k|          n--;
   41|  78.1k|          continue;
   42|  78.1k|        }
   43|       |      /* Note that uc1 and uc2 each have at most 31 bits. */
   44|      0|      return (int)uc1 - (int)uc2;
   45|       |      /* > 0 if uc1 > uc2, < 0 if uc1 < uc2. */
   46|  78.1k|    }
   47|  14.4k|  return 0;
   48|  14.4k|}

u8_strlen:
   27|  42.4k|{
   28|  42.4k|  return strlen ((const char *) s);
   29|  42.4k|}

fat-x86_64.c:fat_init:
  177|      2|{
  178|      2|  struct x86_features features;
  179|      2|  int verbose;
  180|       |
  181|       |  /* FIXME: Replace all getenv calls by getenv_secure? */
  182|      2|  verbose = getenv (ENV_VERBOSE) != NULL;
  ------------------
  |  |   93|      2|#define ENV_VERBOSE "NETTLE_FAT_VERBOSE"
  ------------------
  183|      2|  if (verbose)
  ------------------
  |  Branch (183:7): [True: 0, False: 2]
  ------------------
  184|      0|    fprintf (stderr, "libnettle: fat library initialization.\n");
  185|       |
  186|      2|  get_x86_features (&features);
  187|      2|  if (verbose)
  ------------------
  |  Branch (187:7): [True: 0, False: 2]
  ------------------
  188|      0|    {
  189|      0|      const char * const vendor_names[3] =
  190|      0|	{ "other", "intel", "amd" };
  191|      0|      fprintf (stderr, "libnettle: cpu features: vendor:%s%s%s%s\n",
  192|      0|	       vendor_names[features.vendor],
  193|      0|	       features.have_aesni ? ",aesni" : "",
  ------------------
  |  Branch (193:9): [True: 0, False: 0]
  ------------------
  194|      0|	       features.have_sha_ni ? ",sha_ni" : "",
  ------------------
  |  Branch (194:9): [True: 0, False: 0]
  ------------------
  195|      0|	       features.have_pclmul ? ",pclmul" : "");
  ------------------
  |  Branch (195:9): [True: 0, False: 0]
  ------------------
  196|      0|    }
  197|      2|  if (features.have_aesni)
  ------------------
  |  Branch (197:7): [True: 2, False: 0]
  ------------------
  198|      2|    {
  199|      2|      if (verbose)
  ------------------
  |  Branch (199:11): [True: 0, False: 2]
  ------------------
  200|      0|	fprintf (stderr, "libnettle: using aes instructions.\n");
  201|      2|      nettle_aes128_encrypt_vec = _nettle_aes128_encrypt_aesni;
  202|      2|      nettle_aes128_decrypt_vec = _nettle_aes128_decrypt_aesni;
  203|      2|      nettle_aes192_encrypt_vec = _nettle_aes192_encrypt_aesni;
  204|      2|      nettle_aes192_decrypt_vec = _nettle_aes192_decrypt_aesni;
  205|      2|      nettle_aes256_encrypt_vec = _nettle_aes256_encrypt_aesni;
  206|      2|      nettle_aes256_decrypt_vec = _nettle_aes256_decrypt_aesni;
  207|      2|      nettle_cbc_aes128_encrypt_vec = _nettle_cbc_aes128_encrypt_aesni;
  208|      2|      nettle_cbc_aes192_encrypt_vec = _nettle_cbc_aes192_encrypt_aesni;
  209|      2|      nettle_cbc_aes256_encrypt_vec = _nettle_cbc_aes256_encrypt_aesni;
  210|      2|    }
  211|      0|  else
  212|      0|    {
  213|      0|      if (verbose)
  ------------------
  |  Branch (213:11): [True: 0, False: 0]
  ------------------
  214|      0|	fprintf (stderr, "libnettle: not using aes instructions.\n");
  215|      0|      nettle_aes128_encrypt_vec = _nettle_aes128_encrypt_c;
  216|      0|      nettle_aes128_decrypt_vec = _nettle_aes128_decrypt_c;
  217|      0|      nettle_aes192_encrypt_vec = _nettle_aes192_encrypt_c;
  218|      0|      nettle_aes192_decrypt_vec = _nettle_aes192_decrypt_c;
  219|      0|      nettle_aes256_encrypt_vec = _nettle_aes256_encrypt_c;
  220|      0|      nettle_aes256_decrypt_vec = _nettle_aes256_decrypt_c;
  221|      0|      nettle_cbc_aes128_encrypt_vec = _nettle_cbc_aes128_encrypt_c;
  222|      0|      nettle_cbc_aes192_encrypt_vec = _nettle_cbc_aes192_encrypt_c;
  223|      0|      nettle_cbc_aes256_encrypt_vec = _nettle_cbc_aes256_encrypt_c;
  224|      0|    }
  225|       |
  226|      2|  if (features.have_sha_ni)
  ------------------
  |  Branch (226:7): [True: 0, False: 2]
  ------------------
  227|      0|    {
  228|      0|      if (verbose)
  ------------------
  |  Branch (228:11): [True: 0, False: 0]
  ------------------
  229|      0|	fprintf (stderr, "libnettle: using sha_ni instructions.\n");
  230|      0|      nettle_sha1_compress_vec = _nettle_sha1_compress_sha_ni;
  231|      0|      _nettle_sha256_compress_n_vec = _nettle_sha256_compress_n_sha_ni;
  232|      0|    }
  233|      2|  else
  234|      2|    {
  235|      2|      if (verbose)
  ------------------
  |  Branch (235:11): [True: 0, False: 2]
  ------------------
  236|      0|	fprintf (stderr, "libnettle: not using sha_ni instructions.\n");
  237|      2|      nettle_sha1_compress_vec = _nettle_sha1_compress_x86_64;
  238|      2|      _nettle_sha256_compress_n_vec = _nettle_sha256_compress_n_x86_64;
  239|      2|    }
  240|       |
  241|      2|  if (features.have_pclmul)
  ------------------
  |  Branch (241:7): [True: 2, False: 0]
  ------------------
  242|      2|    {
  243|      2|      if (verbose)
  ------------------
  |  Branch (243:11): [True: 0, False: 2]
  ------------------
  244|      0|	fprintf (stderr, "libnettle: using pclmulqdq instructions.\n");
  245|      2|      _nettle_ghash_set_key_vec = _nettle_ghash_set_key_pclmul;
  246|      2|      _nettle_ghash_update_vec = _nettle_ghash_update_pclmul;
  247|      2|    }
  248|      0|  else
  249|      0|    {
  250|      0|      if (verbose)
  ------------------
  |  Branch (250:11): [True: 0, False: 0]
  ------------------
  251|      0|	fprintf (stderr, "libnettle: not using pclmulqdq instructions.\n");
  252|      0|      _nettle_ghash_set_key_vec = _nettle_ghash_set_key_c;
  253|      0|      _nettle_ghash_update_vec = _nettle_ghash_update_table;
  254|      0|    }
  255|       |
  256|      2|  if (features.vendor == X86_INTEL)
  ------------------
  |  Branch (256:7): [True: 2, False: 0]
  ------------------
  257|      2|    {
  258|      2|      if (verbose)
  ------------------
  |  Branch (258:11): [True: 0, False: 2]
  ------------------
  259|      0|	fprintf (stderr, "libnettle: intel SSE2 will be used for memxor.\n");
  260|      2|      nettle_memxor_vec = _nettle_memxor_sse2;
  261|      2|    }
  262|      0|  else
  263|      0|    {
  264|      0|      if (verbose)
  ------------------
  |  Branch (264:11): [True: 0, False: 0]
  ------------------
  265|      0|	fprintf (stderr, "libnettle: intel SSE2 will not be used for memxor.\n");
  266|      0|      nettle_memxor_vec = _nettle_memxor_x86_64;
  267|      0|    }
  268|      2|}
fat-x86_64.c:get_x86_features:
   68|      2|{
   69|      2|  const char *s;
   70|      2|  features->vendor = X86_OTHER;
   71|      2|  features->have_aesni = 0;
   72|      2|  features->have_sha_ni = 0;
   73|      2|  features->have_pclmul = 0;
   74|       |
   75|      2|  s = secure_getenv (ENV_OVERRIDE);
  ------------------
  |  |   94|      2|#define ENV_OVERRIDE "NETTLE_FAT_OVERRIDE"
  ------------------
   76|      2|  if (s)
  ------------------
  |  Branch (76:7): [True: 0, False: 2]
  ------------------
   77|      0|    for (;;)
   78|      0|      {
   79|      0|	const char *sep = strchr (s, ',');
   80|      0|	size_t length = sep ? (size_t) (sep - s) : strlen(s);
  ------------------
  |  Branch (80:18): [True: 0, False: 0]
  ------------------
   81|       |
   82|      0|	if (SKIP (s, length, "vendor:", 7))
  ------------------
  |  |   61|      0|  (((slen) >= (llen) && memcmp ((s), (literal), llen) == 0)	\
  |  |  ------------------
  |  |  |  Branch (61:3): [True: 0, False: 0]
  |  |  |  Branch (61:5): [True: 0, False: 0]
  |  |  |  Branch (61:25): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|      0|   ? ((slen) -= (llen), (s) += (llen), 1) : 0)
  ------------------
   83|      0|	  {
   84|      0|	    if (MATCH(s, length, "intel", 5))
  ------------------
  |  |   64|      0|  ((slen) == (llen) && memcmp ((s), (literal), llen) == 0)
  |  |  ------------------
  |  |  |  Branch (64:4): [True: 0, False: 0]
  |  |  |  Branch (64:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   85|      0|	      features->vendor = X86_INTEL;
   86|      0|	    else if (MATCH(s, length, "amd", 3))
  ------------------
  |  |   64|      0|  ((slen) == (llen) && memcmp ((s), (literal), llen) == 0)
  |  |  ------------------
  |  |  |  Branch (64:4): [True: 0, False: 0]
  |  |  |  Branch (64:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   87|      0|	      features->vendor = X86_AMD;
   88|       |	    
   89|      0|	  }
   90|      0|	else if (MATCH (s, length, "aesni", 5))
  ------------------
  |  |   64|      0|  ((slen) == (llen) && memcmp ((s), (literal), llen) == 0)
  |  |  ------------------
  |  |  |  Branch (64:4): [True: 0, False: 0]
  |  |  |  Branch (64:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   91|      0|	  features->have_aesni = 1;
   92|      0|	else if (MATCH (s, length, "sha_ni", 6))
  ------------------
  |  |   64|      0|  ((slen) == (llen) && memcmp ((s), (literal), llen) == 0)
  |  |  ------------------
  |  |  |  Branch (64:4): [True: 0, False: 0]
  |  |  |  Branch (64:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   93|      0|	  features->have_sha_ni = 1;
   94|      0|	else if (MATCH (s, length, "pclmul", 6))
  ------------------
  |  |   64|      0|  ((slen) == (llen) && memcmp ((s), (literal), llen) == 0)
  |  |  ------------------
  |  |  |  Branch (64:4): [True: 0, False: 0]
  |  |  |  Branch (64:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   95|      0|	  features->have_pclmul = 1;
   96|      0|	if (!sep)
  ------------------
  |  Branch (96:6): [True: 0, False: 0]
  ------------------
   97|      0|	  break;
   98|      0|	s = sep + 1;
   99|      0|      }
  100|      2|  else
  101|      2|    {
  102|      2|      uint32_t cpuid_data[4];
  103|      2|      _nettle_cpuid (0, cpuid_data);
  104|      2|      if (memcmp (cpuid_data + 1, "Genu" "ntel" "ineI", 12) == 0)
  ------------------
  |  Branch (104:11): [True: 2, False: 0]
  ------------------
  105|      2|	features->vendor = X86_INTEL;
  106|      0|      else if (memcmp (cpuid_data + 1, "Auth" "cAMD" "enti", 12) == 0)
  ------------------
  |  Branch (106:16): [True: 0, False: 0]
  ------------------
  107|      0|	features->vendor = X86_AMD;
  108|       |
  109|      2|      _nettle_cpuid (1, cpuid_data);
  110|      2|      if (cpuid_data[2] & 0x2)
  ------------------
  |  Branch (110:11): [True: 2, False: 0]
  ------------------
  111|      2|	features->have_pclmul = 1;
  112|      2|      if (cpuid_data[2] & 0x02000000)
  ------------------
  |  Branch (112:11): [True: 2, False: 0]
  ------------------
  113|      2|	features->have_aesni = 1;
  114|       |
  115|      2|      _nettle_cpuid (7, cpuid_data);
  116|      2|      if (cpuid_data[1] & 0x20000000)
  ------------------
  |  Branch (116:11): [True: 0, False: 2]
  ------------------
  117|      0|	features->have_sha_ni = 1;
  118|      2|    }
  119|      2|}

mp_get_memory_functions:
  326|      4|{
  327|      4|  if (alloc_func)
  ------------------
  |  Branch (327:7): [True: 4, False: 0]
  ------------------
  328|      4|    *alloc_func = gmp_allocate_func;
  329|       |
  330|      4|  if (realloc_func)
  ------------------
  |  Branch (330:7): [True: 4, False: 0]
  ------------------
  331|      4|    *realloc_func = gmp_reallocate_func;
  332|       |
  333|      4|  if (free_func)
  ------------------
  |  Branch (333:7): [True: 4, False: 0]
  ------------------
  334|      4|    *free_func = gmp_free_func;
  335|      4|}
mp_set_memory_functions:
  341|      4|{
  342|      4|  if (!alloc_func)
  ------------------
  |  Branch (342:7): [True: 4, False: 0]
  ------------------
  343|      4|    alloc_func = gmp_default_alloc;
  344|      4|  if (!realloc_func)
  ------------------
  |  Branch (344:7): [True: 2, False: 2]
  ------------------
  345|      2|    realloc_func = gmp_default_realloc;
  346|      4|  if (!free_func)
  ------------------
  |  Branch (346:7): [True: 2, False: 2]
  ------------------
  347|      2|    free_func = gmp_default_free;
  348|       |
  349|      4|  gmp_allocate_func = alloc_func;
  350|      4|  gmp_reallocate_func = realloc_func;
  351|      4|  gmp_free_func = free_func;
  352|      4|}

opendir:
   49|    587|{
   50|    587|	DIR *(*libc_opendir)(const char *) =
   51|    587|		(DIR *(*)(const char *)) dlsym (RTLD_NEXT, "opendir");
   52|       |
   53|    587|	if (config.dont_write)
  ------------------
  |  Branch (53:6): [True: 584, False: 3]
  ------------------
   54|    584|		return NULL;
   55|       |
   56|      3|	return libc_opendir(name);
   57|       |/*
   58|       |#ifdef TEST_RUN
   59|       |	printf("opendir %s\n", name);
   60|       |	if (!strcmp(name, SRCDIR"/wget_options_fuzzer.in"))
   61|       |		return libc_opendir(name);
   62|       |	if (!strcmp(name, SRCDIR"/wget_options_fuzzer.new"))
   63|       |		return libc_opendir(name);
   64|       |	if (!strcmp(name, SRCDIR"/wget_options_fuzzer.repro"))
   65|       |		return libc_opendir(name);
   66|       |#else
   67|       |	if (!strcmp(name, "wget_options_fuzzer.in"))
   68|       |		return libc_opendir(name);
   69|       |	if (!strcmp(name, "wget_options_fuzzer.new"))
   70|       |		return libc_opendir(name);
   71|       |	if (!strcmp(name, "wget_options_fuzzer.repro"))
   72|       |		return libc_opendir(name);
   73|       |#endif
   74|       |
   75|       |	return libc_opendir(name);
   76|       |*/
   77|    587|}
fopen:
   80|  40.2k|{
   81|  40.2k|	FILE *(*libc_fopen)(const char *, const char *) =
   82|  40.2k|		(FILE *(*)(const char *, const char *)) dlsym (RTLD_NEXT, "fopen");
   83|       |
   84|  40.2k|	if (config.dont_write) {
  ------------------
  |  Branch (84:6): [True: 30.4k, False: 9.78k]
  ------------------
   85|  30.4k|		if (!strcmp(pathname, "d41d8cd98f00b204e9800998ecf8428e") && !strcmp(mode, "r"))
  ------------------
  |  Branch (85:7): [True: 23.2k, False: 7.28k]
  |  Branch (85:64): [True: 23.2k, False: 0]
  ------------------
   86|  23.2k|			return fmemopen((void *) g_data, g_size, mode);
   87|       |
   88|       |//		printf("open %s, %s\n", pathname, mode);
   89|  30.4k|	}
   90|       |
   91|  17.0k|	return libc_fopen(pathname, mode);
   92|  40.2k|}
LLVMFuzzerTestOneInput:
   97|  9.60k|{
   98|  9.60k|	if (size > 2048) // same as max_len = 4096 in .options file
  ------------------
  |  Branch (98:6): [True: 11, False: 9.59k]
  ------------------
   99|     11|		return 0;
  100|       |
  101|  9.59k|	g_data = data;
  102|  9.59k|	g_size = size;
  103|       |
  104|  9.59k|	config.dont_write = 1;
  105|       |
  106|  9.59k|	if (size == 0)
  ------------------
  |  Branch (106:6): [True: 0, False: 9.59k]
  ------------------
  107|      0|		selftest_options();
  108|       |
  109|       |// try not to open/write to the file system
  110|  9.59k|#if defined HAVE_DLFCN_H && defined HAVE_FMEMOPEN
  111|  9.59k|	static const char *argv[] = { "x", "-q", "--no-config", "--no-local-db", "--config", "d41d8cd98f00b204e9800998ecf8428e" };
  112|  9.59k|	plugin_db_init();
  113|  9.59k|	enable_testing(); // function in wget2 to prevent unwanted action while testing
  114|  9.59k|	init(sizeof(argv)/sizeof(argv[0]), argv);
  115|  9.59k|	deinit();
  116|  9.59k|	plugin_db_finalize(0);
  117|  9.59k|#endif
  118|       |
  119|  9.59k|	config.dont_write = 0;
  120|       |
  121|  9.59k|	return 0;
  122|  9.60k|}

c_strcasecmp:
   28|   560k|{
   29|   560k|  register const unsigned char *p1 = (const unsigned char *) s1;
   30|   560k|  register const unsigned char *p2 = (const unsigned char *) s2;
   31|   560k|  unsigned char c1, c2;
   32|       |
   33|   560k|  if (p1 == p2)
  ------------------
  |  Branch (33:7): [True: 0, False: 560k]
  ------------------
   34|      0|    return 0;
   35|       |
   36|   560k|  do
   37|  1.24M|    {
   38|  1.24M|      c1 = c_tolower (*p1);
   39|  1.24M|      c2 = c_tolower (*p2);
   40|       |
   41|  1.24M|      if (c1 == '\0')
  ------------------
  |  Branch (41:11): [True: 77.0k, False: 1.16M]
  ------------------
   42|  77.0k|        break;
   43|       |
   44|  1.16M|      ++p1;
   45|  1.16M|      ++p2;
   46|  1.16M|    }
   47|  1.16M|  while (c1 == c2);
  ------------------
  |  Branch (47:10): [True: 686k, False: 483k]
  ------------------
   48|       |
   49|   560k|  if (UCHAR_MAX <= INT_MAX)
  ------------------
  |  Branch (49:7): [Folded - Ignored]
  ------------------
   50|   560k|    return c1 - c2;
   51|      0|  else
   52|       |    /* On machines where 'char' and 'int' are types of the same size, the
   53|       |       difference of two 'unsigned char' values - including the sign bit -
   54|       |       doesn't fit in an 'int'.  */
   55|      0|    return _GL_CMP (c1, c2);
  ------------------
  |  | 3239|      0|#define _GL_CMP(n1, n2) (((n1) > (n2)) - ((n1) < (n2)))
  ------------------
   56|   560k|}

c_strncasecmp:
   28|  8.80k|{
   29|  8.80k|  register const unsigned char *p1 = (const unsigned char *) s1;
   30|  8.80k|  register const unsigned char *p2 = (const unsigned char *) s2;
   31|  8.80k|  unsigned char c1, c2;
   32|       |
   33|  8.80k|  if (p1 == p2 || n == 0)
  ------------------
  |  Branch (33:7): [True: 0, False: 8.80k]
  |  Branch (33:19): [True: 210, False: 8.59k]
  ------------------
   34|    210|    return 0;
   35|       |
   36|  8.59k|  do
   37|  13.4k|    {
   38|  13.4k|      c1 = c_tolower (*p1);
   39|  13.4k|      c2 = c_tolower (*p2);
   40|       |
   41|  13.4k|      if (--n == 0 || c1 == '\0')
  ------------------
  |  Branch (41:11): [True: 5.50k, False: 7.98k]
  |  Branch (41:23): [True: 622, False: 7.36k]
  ------------------
   42|  6.12k|        break;
   43|       |
   44|  7.36k|      ++p1;
   45|  7.36k|      ++p2;
   46|  7.36k|    }
   47|  8.59k|  while (c1 == c2);
  ------------------
  |  Branch (47:10): [True: 4.89k, False: 2.47k]
  ------------------
   48|       |
   49|  8.59k|  if (UCHAR_MAX <= INT_MAX)
  ------------------
  |  Branch (49:7): [Folded - Ignored]
  ------------------
   50|  8.59k|    return c1 - c2;
   51|      0|  else
   52|       |    /* On machines where 'char' and 'int' are types of the same size, the
   53|       |       difference of two 'unsigned char' values - including the sign bit -
   54|       |       doesn't fit in an 'int'.  */
   55|      0|    return _GL_CMP (c1, c2);
  ------------------
  |  | 3239|      0|#define _GL_CMP(n1, n2) (((n1) > (n2)) - ((n1) < (n2)))
  ------------------
   56|  8.59k|}

rpl_fclose:
   59|  24.1k|{
   60|  24.1k|  int saved_errno = 0;
   61|  24.1k|  int fd;
   62|  24.1k|  int result = 0;
   63|       |
   64|       |  /* Don't change behavior on memstreams.  */
   65|  24.1k|  fd = fileno (fp);
   66|  24.1k|  if (fd < 0)
  ------------------
  |  Branch (66:7): [True: 23.2k, False: 950]
  ------------------
   67|  23.2k|    return fclose_nothrow (fp);
  ------------------
  |  |   52|  23.2k|# define fclose_nothrow fclose
  ------------------
   68|       |
   69|       |  /* We only need to flush the file if it is not reading or if it is
   70|       |     seekable.  This only guarantees the file position of input files
   71|       |     if the fflush module is also in use.  */
   72|    950|  if ((!freading (fp) || lseek (fileno (fp), 0, SEEK_CUR) != -1)
  ------------------
  |  |   45|  1.90k|# define freading(stream) (__freading (stream) != 0)
  ------------------
  |  Branch (72:8): [True: 0, False: 950]
  |  Branch (72:26): [True: 132, False: 818]
  ------------------
   73|    950|      && fflush (fp))
  ------------------
  |  Branch (73:10): [True: 0, False: 132]
  ------------------
   74|      0|    saved_errno = errno;
   75|       |
   76|       |  /* fclose() calls close(), but we need to also invoke all hooks that our
   77|       |     overridden close() function invokes.  See lib/close.c.  */
   78|       |#if WINDOWS_SOCKETS
   79|       |  /* Call the overridden close(), then the original fclose().
   80|       |     Note about multithread-safety: There is a race condition where some
   81|       |     other thread could open fd between our close and fclose.  */
   82|       |  if (close (fd) < 0 && saved_errno == 0)
   83|       |    saved_errno = errno;
   84|       |
   85|       |  fclose_nothrow (fp); /* will fail with errno = EBADF,
   86|       |                          if we did not lose a race */
   87|       |
   88|       |#else /* !WINDOWS_SOCKETS */
   89|       |  /* Call fclose() and invoke all hooks of the overridden close().  */
   90|       |
   91|       |# if REPLACE_FCHDIR
   92|       |  /* Note about multithread-safety: There is a race condition here as well.
   93|       |     Some other thread could open fd between our calls to fclose and
   94|       |     _gl_unregister_fd.  */
   95|       |  result = fclose_nothrow (fp);
   96|       |  if (result == 0)
   97|       |    _gl_unregister_fd (fd);
   98|       |# else
   99|       |  /* No race condition here.  */
  100|    950|  result = fclose_nothrow (fp);
  ------------------
  |  |   52|    950|# define fclose_nothrow fclose
  ------------------
  101|    950|# endif
  102|       |
  103|    950|#endif /* !WINDOWS_SOCKETS */
  104|       |
  105|    950|  if (saved_errno != 0)
  ------------------
  |  Branch (105:7): [True: 0, False: 950]
  ------------------
  106|      0|    {
  107|      0|      errno = saved_errno;
  108|      0|      result = EOF;
  109|      0|    }
  110|       |
  111|    950|  return result;
  112|  24.1k|}

rpl_fflush:
  128|  38.4k|{
  129|       |  /* When stream is NULL, POSIX and C99 only require flushing of "output
  130|       |     streams and update streams in which the most recent operation was not
  131|       |     input", and all implementations do this.
  132|       |
  133|       |     When stream is "an output stream or an update stream in which the most
  134|       |     recent operation was not input", POSIX and C99 requires that fflush
  135|       |     writes out any buffered data, and all implementations do this.
  136|       |
  137|       |     When stream is, however, an input stream or an update stream in
  138|       |     which the most recent operation was input, C99 specifies nothing,
  139|       |     and POSIX only specifies behavior if the stream is seekable.
  140|       |     mingw, in particular, drops the input buffer, leaving the file
  141|       |     descriptor positioned at the end of the input buffer. I.e. ftell
  142|       |     (stream) is lost.  We don't want to call the implementation's
  143|       |     fflush in this case.
  144|       |
  145|       |     We test ! freading (stream) here, rather than fwriting (stream), because
  146|       |     what we need to know is whether the stream holds a "read buffer", and on
  147|       |     mingw this is indicated by _IOREAD, regardless of _IOWRT.  */
  148|  38.4k|  if (stream == NULL || ! freading (stream))
  ------------------
  |  |   45|  38.4k|# define freading(stream) (__freading (stream) != 0)
  ------------------
  |  Branch (148:7): [True: 0, False: 38.4k]
  |  Branch (148:25): [True: 38.3k, False: 132]
  ------------------
  149|  38.3k|    return fflush (stream);
  150|       |
  151|    132|#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1
  152|       |  /* GNU libc, BeOS, Haiku, Linux libc5 */
  153|       |
  154|    132|  clear_ungetc_buffer_preserving_position (stream);
  155|       |
  156|    132|  return fflush (stream);
  157|       |
  158|       |#else
  159|       |  {
  160|       |    /* What POSIX says:
  161|       |       1) About the file-position indicator (-> fseeko, ftello):
  162|       |          The file position indicator is incremented by fgetc() and decremented
  163|       |          by ungetc():
  164|       |          <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fgetc.html>
  165|       |            "... the fgetc() function shall ... advance the associated file
  166|       |             position indicator for the stream ..."
  167|       |          <https://pubs.opengroup.org/onlinepubs/9699919799/functions/ungetc.html>
  168|       |            "The file-position indicator is decremented by each successful
  169|       |             call to ungetc()..."
  170|       |       2) fflush discards bytes pushed back by ungetc:
  171|       |          <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fflush.html>
  172|       |            "...any characters pushed back onto the stream by ungetc()
  173|       |             or ungetwc() that have not subsequently been read from the
  174|       |             stream shall be discarded..."
  175|       |          This implies implicitly: fflush does not change the file position
  176|       |          indicator.
  177|       |       3) Effects on the file descriptor, if the file descriptor is capable of
  178|       |          seeking:
  179|       |          <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fflush.html>
  180|       |            "...the file offset of the underlying open file description shall
  181|       |             be set to the file position of the stream..."  */
  182|       |
  183|       |    /* POSIX does not specify fflush behavior for non-seekable input
  184|       |       streams.  Some implementations purge unread data, some return
  185|       |       EBADF, some do nothing.  */
  186|       |    off_t pos = ftello (stream);
  187|       |    if (pos == -1)
  188|       |      {
  189|       |        errno = EBADF;
  190|       |        return EOF;
  191|       |      }
  192|       |
  193|       |    /* Clear the ungetc buffer.  */
  194|       |    clear_ungetc_buffer (stream);
  195|       |
  196|       |    /* To get here, we must be flushing a seekable input stream, so the
  197|       |       semantics of fpurge are now appropriate to clear the buffer.  To
  198|       |       avoid losing data, the lseek is also necessary.  */
  199|       |    {
  200|       |      int result = fpurge (stream);
  201|       |      if (result != 0)
  202|       |        return result;
  203|       |    }
  204|       |
  205|       |# if (defined __sferror || defined __DragonFly__ || defined __ANDROID__) && defined __SNPT
  206|       |    /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
  207|       |
  208|       |    {
  209|       |      /* Disable seek optimization for the next fseeko call.  This tells the
  210|       |         following fseeko call to seek to the desired position directly, rather
  211|       |         than to seek to a block-aligned boundary.  */
  212|       |      int saved_flags = disable_seek_optimization (stream);
  213|       |      int result = fseeko (stream, pos, SEEK_SET);
  214|       |
  215|       |      restore_seek_optimization (stream, saved_flags);
  216|       |      return result;
  217|       |    }
  218|       |
  219|       |# else
  220|       |
  221|       |    pos = lseek (fileno (stream), pos, SEEK_SET);
  222|       |    if (pos == -1)
  223|       |      return EOF;
  224|       |    /* After a successful lseek, update the file descriptor's position cache
  225|       |       in the stream.  */
  226|       |    update_fpos_cache (stream, pos);
  227|       |
  228|       |    return 0;
  229|       |
  230|       |# endif
  231|       |  }
  232|       |#endif
  233|  38.4k|}
fflush.c:clear_ungetc_buffer_preserving_position:
   40|    132|{
   41|    132|  if (fp->_flags & _IO_IN_BACKUP)
  ------------------
  |  |   29|    132|#  define _IO_IN_BACKUP 0x100
  ------------------
  |  Branch (41:7): [True: 0, False: 132]
  ------------------
   42|       |    /* _IO_free_backup_area is a bit complicated.  Simply call fseek.  */
   43|      0|    fseeko (fp, 0, SEEK_CUR);
   44|    132|}

rpl_fopen:
   53|  27.8k|{
   54|  27.8k|  int open_direction;
   55|  27.8k|  int open_flags;
   56|  27.8k|#if GNULIB_FOPEN_GNU
   57|  27.8k|  bool open_flags_gnu;
   58|  27.8k|# define BUF_SIZE 80
   59|  27.8k|  char fdopen_mode_buf[BUF_SIZE + 1];
   60|  27.8k|#endif
   61|       |
   62|       |#if defined _WIN32 && ! defined __CYGWIN__
   63|       |  if (strcmp (filename, "/dev/null") == 0)
   64|       |    filename = "NUL";
   65|       |#endif
   66|       |
   67|       |  /* Parse the mode.  */
   68|  27.8k|  open_direction = 0;
   69|  27.8k|  open_flags = 0;
   70|  27.8k|#if GNULIB_FOPEN_GNU
   71|  27.8k|  open_flags_gnu = false;
   72|  27.8k|#endif
   73|  27.8k|  {
   74|  27.8k|    const char *p = mode;
   75|  27.8k|#if GNULIB_FOPEN_GNU
   76|  27.8k|    char *q = fdopen_mode_buf;
   77|  27.8k|#endif
   78|       |
   79|  55.6k|    for (; *p != '\0'; p++)
  ------------------
  |  Branch (79:12): [True: 27.8k, False: 27.8k]
  ------------------
   80|  27.8k|      {
   81|  27.8k|        switch (*p)
   82|  27.8k|          {
   83|  27.8k|          case 'r':
  ------------------
  |  Branch (83:11): [True: 27.8k, False: 0]
  ------------------
   84|  27.8k|            open_direction = O_RDONLY;
   85|  27.8k|#if GNULIB_FOPEN_GNU
   86|  27.8k|            if (q < fdopen_mode_buf + BUF_SIZE)
  ------------------
  |  |   58|  27.8k|# define BUF_SIZE 80
  ------------------
  |  Branch (86:17): [True: 27.8k, False: 0]
  ------------------
   87|  27.8k|              *q++ = *p;
   88|  27.8k|#endif
   89|  27.8k|            continue;
   90|      0|          case 'w':
  ------------------
  |  Branch (90:11): [True: 0, False: 27.8k]
  ------------------
   91|      0|            open_direction = O_WRONLY;
   92|      0|            open_flags |= O_CREAT | O_TRUNC;
   93|      0|#if GNULIB_FOPEN_GNU
   94|      0|            if (q < fdopen_mode_buf + BUF_SIZE)
  ------------------
  |  |   58|      0|# define BUF_SIZE 80
  ------------------
  |  Branch (94:17): [True: 0, False: 0]
  ------------------
   95|      0|              *q++ = *p;
   96|      0|#endif
   97|      0|            continue;
   98|      0|          case 'a':
  ------------------
  |  Branch (98:11): [True: 0, False: 27.8k]
  ------------------
   99|      0|            open_direction = O_WRONLY;
  100|      0|            open_flags |= O_CREAT | O_APPEND;
  101|      0|#if GNULIB_FOPEN_GNU
  102|      0|            if (q < fdopen_mode_buf + BUF_SIZE)
  ------------------
  |  |   58|      0|# define BUF_SIZE 80
  ------------------
  |  Branch (102:17): [True: 0, False: 0]
  ------------------
  103|      0|              *q++ = *p;
  104|      0|#endif
  105|      0|            continue;
  106|      0|          case 'b':
  ------------------
  |  Branch (106:11): [True: 0, False: 27.8k]
  ------------------
  107|       |            /* While it is non-standard, O_BINARY is guaranteed by
  108|       |               gnulib <fcntl.h>.  We can also assume that orig_fopen
  109|       |               supports the 'b' flag.  */
  110|      0|            open_flags |= O_BINARY;
  111|      0|#if GNULIB_FOPEN_GNU
  112|      0|            if (q < fdopen_mode_buf + BUF_SIZE)
  ------------------
  |  |   58|      0|# define BUF_SIZE 80
  ------------------
  |  Branch (112:17): [True: 0, False: 0]
  ------------------
  113|      0|              *q++ = *p;
  114|      0|#endif
  115|      0|            continue;
  116|      0|          case '+':
  ------------------
  |  Branch (116:11): [True: 0, False: 27.8k]
  ------------------
  117|      0|            open_direction = O_RDWR;
  118|      0|#if GNULIB_FOPEN_GNU
  119|      0|            if (q < fdopen_mode_buf + BUF_SIZE)
  ------------------
  |  |   58|      0|# define BUF_SIZE 80
  ------------------
  |  Branch (119:17): [True: 0, False: 0]
  ------------------
  120|      0|              *q++ = *p;
  121|      0|#endif
  122|      0|            continue;
  123|      0|#if GNULIB_FOPEN_GNU
  124|      0|          case 'x':
  ------------------
  |  Branch (124:11): [True: 0, False: 27.8k]
  ------------------
  125|      0|            open_flags |= O_EXCL;
  126|      0|            open_flags_gnu = true;
  127|      0|            continue;
  128|      0|          case 'e':
  ------------------
  |  Branch (128:11): [True: 0, False: 27.8k]
  ------------------
  129|      0|            open_flags |= O_CLOEXEC;
  130|      0|            open_flags_gnu = true;
  131|      0|            continue;
  132|      0|#endif
  133|      0|          default:
  ------------------
  |  Branch (133:11): [True: 0, False: 27.8k]
  ------------------
  134|      0|            break;
  135|  27.8k|          }
  136|      0|#if GNULIB_FOPEN_GNU
  137|       |        /* The rest of the mode string can be a platform-dependent extension.
  138|       |           Copy it unmodified.  */
  139|      0|        {
  140|      0|          size_t len = strlen (p);
  141|      0|          if (len > fdopen_mode_buf + BUF_SIZE - q)
  ------------------
  |  |   58|      0|# define BUF_SIZE 80
  ------------------
  |  Branch (141:15): [True: 0, False: 0]
  ------------------
  142|      0|            len = fdopen_mode_buf + BUF_SIZE - q;
  ------------------
  |  |   58|      0|# define BUF_SIZE 80
  ------------------
  143|      0|          memcpy (q, p, len);
  144|      0|          q += len;
  145|      0|        }
  146|      0|#endif
  147|      0|        break;
  148|  27.8k|      }
  149|  27.8k|#if GNULIB_FOPEN_GNU
  150|  27.8k|    *q = '\0';
  151|  27.8k|#endif
  152|  27.8k|  }
  153|       |
  154|       |#if FOPEN_TRAILING_SLASH_BUG
  155|       |  /* Fail if the mode requires write access and the filename ends in a slash,
  156|       |     as POSIX says such a filename must name a directory
  157|       |     <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13>:
  158|       |       "A pathname that contains at least one non-<slash> character and that
  159|       |        ends with one or more trailing <slash> characters shall not be resolved
  160|       |        successfully unless the last pathname component before the trailing
  161|       |        <slash> characters names an existing directory"
  162|       |     If the named file already exists as a directory, then if a mode that
  163|       |     requires write access is specified, fopen() must fail because POSIX
  164|       |     <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fopen.html>
  165|       |     says that it fails with errno = EISDIR in this case.
  166|       |     If the named file does not exist or does not name a directory, then
  167|       |     fopen() must fail since the file does not contain a '.' directory.  */
  168|       |  {
  169|       |    size_t len = strlen (filename);
  170|       |    if (len > 0 && filename[len - 1] == '/')
  171|       |      {
  172|       |        int fd;
  173|       |        struct stat statbuf;
  174|       |        FILE *fp;
  175|       |
  176|       |        if (open_direction != O_RDONLY)
  177|       |          {
  178|       |            errno = EISDIR;
  179|       |            return NULL;
  180|       |          }
  181|       |
  182|       |        fd = open (filename, open_direction | open_flags,
  183|       |                   S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
  184|       |        if (fd < 0)
  185|       |          return NULL;
  186|       |
  187|       |        if (fstat (fd, &statbuf) >= 0 && !S_ISDIR (statbuf.st_mode))
  188|       |          {
  189|       |            close (fd);
  190|       |            errno = ENOTDIR;
  191|       |            return NULL;
  192|       |          }
  193|       |
  194|       |# if GNULIB_FOPEN_GNU
  195|       |        fp = fdopen (fd, fdopen_mode_buf);
  196|       |# else
  197|       |        fp = fdopen (fd, mode);
  198|       |# endif
  199|       |        if (fp == NULL)
  200|       |          {
  201|       |            int saved_errno = errno;
  202|       |            close (fd);
  203|       |            errno = saved_errno;
  204|       |          }
  205|       |        return fp;
  206|       |      }
  207|       |  }
  208|       |#endif
  209|       |
  210|      0|#if GNULIB_FOPEN_GNU
  211|  27.8k|  if (open_flags_gnu)
  ------------------
  |  Branch (211:7): [True: 0, False: 27.8k]
  ------------------
  212|      0|    {
  213|      0|      int fd;
  214|      0|      FILE *fp;
  215|       |
  216|      0|      fd = open (filename, open_direction | open_flags,
  217|      0|                 S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
  218|      0|      if (fd < 0)
  ------------------
  |  Branch (218:11): [True: 0, False: 0]
  ------------------
  219|      0|        return NULL;
  220|       |
  221|      0|      fp = fdopen (fd, fdopen_mode_buf);
  222|      0|      if (fp == NULL)
  ------------------
  |  Branch (222:11): [True: 0, False: 0]
  ------------------
  223|      0|        {
  224|      0|          int saved_errno = errno;
  225|      0|          close (fd);
  226|      0|          errno = saved_errno;
  227|      0|        }
  228|      0|      return fp;
  229|      0|    }
  230|  27.8k|#endif
  231|       |
  232|       |  /* open_direction is sometimes used, sometimes unused.
  233|       |     Silence gcc's warning about this situation.  */
  234|  27.8k|  (void) open_direction;
  235|       |
  236|  27.8k|  return orig_fopen (filename, mode);
  237|  27.8k|}
fopen.c:orig_fopen:
   31|  27.8k|{
   32|  27.8k|  return fopen (filename, mode);
   33|  27.8k|}

rpl_free:
   33|   717k|{
   34|       |# if defined __GNUC__ && !defined __clang__
   35|       |  /* An invalid GCC optimization
   36|       |     <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98396>
   37|       |     would optimize away the assignments in the code below, when link-time
   38|       |     optimization (LTO) is enabled.  Make the code more complicated, so that
   39|       |     GCC does not grok how to optimize it.  */
   40|       |  int err[2];
   41|       |  err[0] = errno;
   42|       |  err[1] = errno;
   43|       |  errno = 0;
   44|       |  free (p);
   45|       |  errno = err[errno == 0];
   46|       |# else
   47|   717k|  int err = errno;
   48|   717k|  free (p);
   49|   717k|  errno = err;
   50|   717k|# endif
   51|   717k|}

rpl_glob:
  290|  78.0k|{
  291|  78.0k|  const char *filename;
  292|  78.0k|  char *dirname = NULL;
  293|  78.0k|  size_t dirlen;
  294|  78.0k|  int status;
  295|  78.0k|  size_t oldcount;
  296|  78.0k|  int meta;
  297|  78.0k|  int dirname_modified;
  298|  78.0k|  int malloc_dirname = 0;
  299|  78.0k|  glob_t dirs;
  300|  78.0k|  int retval = 0;
  301|  78.0k|  size_t alloca_used = 0;
  302|       |
  303|  78.0k|  if (pattern == NULL || pglob == NULL || (flags & ~__GLOB_FLAGS) != 0)
  ------------------
  |  Branch (303:7): [True: 0, False: 78.0k]
  |  Branch (303:26): [True: 0, False: 78.0k]
  |  Branch (303:43): [True: 0, False: 78.0k]
  ------------------
  304|      0|    {
  305|      0|      __set_errno (EINVAL);
  ------------------
  |  |   46|      0|# define __set_errno(val) (errno = (val))
  ------------------
  306|      0|      return -1;
  307|      0|    }
  308|       |
  309|       |  /* POSIX requires all slashes to be matched.  This means that with
  310|       |     a trailing slash we must match only directories.  */
  311|  78.0k|  if (pattern[0] && pattern[strlen (pattern) - 1] == '/')
  ------------------
  |  Branch (311:7): [True: 78.0k, False: 7]
  |  Branch (311:21): [True: 38.7k, False: 39.3k]
  ------------------
  312|  38.7k|    flags |= GLOB_ONLYDIR;
  313|       |
  314|  78.0k|  if (!(flags & GLOB_DOOFFS))
  ------------------
  |  Branch (314:7): [True: 78.0k, False: 0]
  ------------------
  315|       |    /* Have to do this so 'globfree' knows where to start freeing.  It
  316|       |       also makes all the code that uses gl_offs simpler. */
  317|  78.0k|    pglob->gl_offs = 0;
  318|       |
  319|  78.0k|  if (!(flags & GLOB_APPEND))
  ------------------
  |  Branch (319:7): [True: 78.0k, False: 0]
  ------------------
  320|  78.0k|    {
  321|  78.0k|      pglob->gl_pathc = 0;
  322|  78.0k|      if (!(flags & GLOB_DOOFFS))
  ------------------
  |  Branch (322:11): [True: 78.0k, False: 0]
  ------------------
  323|  78.0k|        pglob->gl_pathv = NULL;
  324|      0|      else
  325|      0|        {
  326|      0|          size_t i;
  327|       |
  328|      0|          if (pglob->gl_offs >= ~((size_t) 0) / sizeof (char *))
  ------------------
  |  Branch (328:15): [True: 0, False: 0]
  ------------------
  329|      0|            return GLOB_NOSPACE;
  330|       |
  331|      0|          pglob->gl_pathv = (char **) malloc ((pglob->gl_offs + 1)
  332|      0|                                              * sizeof (char *));
  333|      0|          if (pglob->gl_pathv == NULL)
  ------------------
  |  Branch (333:15): [True: 0, False: 0]
  ------------------
  334|      0|            return GLOB_NOSPACE;
  335|       |
  336|      0|          for (i = 0; i <= pglob->gl_offs; ++i)
  ------------------
  |  Branch (336:23): [True: 0, False: 0]
  ------------------
  337|      0|            pglob->gl_pathv[i] = NULL;
  338|      0|        }
  339|  78.0k|    }
  340|       |
  341|  78.0k|  if (flags & GLOB_BRACE)
  ------------------
  |  Branch (341:7): [True: 0, False: 78.0k]
  ------------------
  342|      0|    {
  343|      0|      const char *begin;
  344|       |
  345|      0|      if (flags & GLOB_NOESCAPE)
  ------------------
  |  Branch (345:11): [True: 0, False: 0]
  ------------------
  346|      0|        begin = strchr (pattern, '{');
  347|      0|      else
  348|      0|        {
  349|      0|          begin = pattern;
  350|      0|          while (1)
  ------------------
  |  Branch (350:18): [Folded - Ignored]
  ------------------
  351|      0|            {
  352|      0|              if (*begin == '\0')
  ------------------
  |  Branch (352:19): [True: 0, False: 0]
  ------------------
  353|      0|                {
  354|      0|                  begin = NULL;
  355|      0|                  break;
  356|      0|                }
  357|       |
  358|      0|              if (*begin == '\\' && begin[1] != '\0')
  ------------------
  |  Branch (358:19): [True: 0, False: 0]
  |  Branch (358:37): [True: 0, False: 0]
  ------------------
  359|      0|                ++begin;
  360|      0|              else if (*begin == '{')
  ------------------
  |  Branch (360:24): [True: 0, False: 0]
  ------------------
  361|      0|                break;
  362|       |
  363|      0|              ++begin;
  364|      0|            }
  365|      0|        }
  366|       |
  367|      0|      if (begin != NULL)
  ------------------
  |  Branch (367:11): [True: 0, False: 0]
  ------------------
  368|      0|        {
  369|       |          /* Allocate working buffer large enough for our work.  Note that
  370|       |             we have at least an opening and closing brace.  */
  371|      0|          size_t firstc;
  372|      0|          char *alt_start;
  373|      0|          const char *p;
  374|      0|          const char *next;
  375|      0|          const char *rest;
  376|      0|          size_t rest_len;
  377|      0|          char *onealt;
  378|      0|          size_t pattern_len = strlen (pattern) - 1;
  379|      0|          int alloca_onealt = glob_use_alloca (alloca_used, pattern_len);
  380|      0|          if (alloca_onealt)
  ------------------
  |  Branch (380:15): [True: 0, False: 0]
  ------------------
  381|      0|            onealt = alloca_account (pattern_len, alloca_used);
  ------------------
  |  |  201|      0|# define alloca_account(len, avar) ((void) (len), (void) (avar), (void *) 0)
  ------------------
  382|      0|          else
  383|      0|            {
  384|      0|              onealt = malloc (pattern_len);
  385|      0|              if (onealt == NULL)
  ------------------
  |  Branch (385:19): [True: 0, False: 0]
  ------------------
  386|      0|                return GLOB_NOSPACE;
  387|      0|            }
  388|       |
  389|       |          /* We know the prefix for all sub-patterns.  */
  390|      0|          alt_start = mempcpy (onealt, pattern, begin - pattern);
  391|       |
  392|       |          /* Find the first sub-pattern and at the same time find the
  393|       |             rest after the closing brace.  */
  394|      0|          next = next_brace_sub (begin + 1, flags);
  395|      0|          if (next == NULL)
  ------------------
  |  Branch (395:15): [True: 0, False: 0]
  ------------------
  396|      0|            {
  397|       |              /* It is an invalid expression.  */
  398|      0|            illegal_brace:
  399|      0|              if (__glibc_unlikely (!alloca_onealt))
  ------------------
  |  |  520|      0|# define __glibc_unlikely(cond)	__builtin_expect ((cond), 0)
  |  |  ------------------
  |  |  |  Branch (520:33): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  400|      0|                free (onealt);
  401|      0|              flags &= ~GLOB_BRACE;
  402|      0|              goto no_brace;
  403|      0|            }
  404|       |
  405|       |          /* Now find the end of the whole brace expression.  */
  406|      0|          rest = next;
  407|      0|          while (*rest != '}')
  ------------------
  |  Branch (407:18): [True: 0, False: 0]
  ------------------
  408|      0|            {
  409|      0|              rest = next_brace_sub (rest + 1, flags);
  410|      0|              if (rest == NULL)
  ------------------
  |  Branch (410:19): [True: 0, False: 0]
  ------------------
  411|       |                /* It is an illegal expression.  */
  412|      0|                goto illegal_brace;
  413|      0|            }
  414|       |          /* Please note that we now can be sure the brace expression
  415|       |             is well-formed.  */
  416|      0|          rest_len = strlen (++rest) + 1;
  417|       |
  418|       |          /* We have a brace expression.  BEGIN points to the opening {,
  419|       |             NEXT points past the terminator of the first element, and END
  420|       |             points past the final }.  We will accumulate result names from
  421|       |             recursive runs for each brace alternative in the buffer using
  422|       |             GLOB_APPEND.  */
  423|      0|          firstc = pglob->gl_pathc;
  424|       |
  425|      0|          p = begin + 1;
  426|      0|          while (1)
  ------------------
  |  Branch (426:18): [Folded - Ignored]
  ------------------
  427|      0|            {
  428|      0|              int result;
  429|       |
  430|       |              /* Construct the new glob expression.  */
  431|      0|              mempcpy (mempcpy (alt_start, p, next - p), rest, rest_len);
  432|       |
  433|      0|              result = __glob (onealt,
  ------------------
  |  |   80|      0|# define __glob                 glob
  ------------------
  434|      0|                               ((flags & ~(GLOB_NOCHECK | GLOB_NOMAGIC))
  435|      0|                                | GLOB_APPEND),
  436|      0|                               errfunc, pglob);
  437|       |
  438|       |              /* If we got an error, return it.  */
  439|      0|              if (result && result != GLOB_NOMATCH)
  ------------------
  |  Branch (439:19): [True: 0, False: 0]
  |  Branch (439:29): [True: 0, False: 0]
  ------------------
  440|      0|                {
  441|      0|                  if (__glibc_unlikely (!alloca_onealt))
  ------------------
  |  |  520|      0|# define __glibc_unlikely(cond)	__builtin_expect ((cond), 0)
  |  |  ------------------
  |  |  |  Branch (520:33): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  442|      0|                    free (onealt);
  443|      0|                  if (!(flags & GLOB_APPEND))
  ------------------
  |  Branch (443:23): [True: 0, False: 0]
  ------------------
  444|      0|                    {
  445|      0|                      globfree (pglob);
  446|      0|                      pglob->gl_pathc = 0;
  447|      0|                    }
  448|      0|                  return result;
  449|      0|                }
  450|       |
  451|      0|              if (*next == '}')
  ------------------
  |  Branch (451:19): [True: 0, False: 0]
  ------------------
  452|       |                /* We saw the last entry.  */
  453|      0|                break;
  454|       |
  455|      0|              p = next + 1;
  456|      0|              next = next_brace_sub (p, flags);
  457|      0|              assert (next != NULL);
  458|      0|            }
  459|       |
  460|      0|          if (__glibc_unlikely (!alloca_onealt))
  ------------------
  |  |  520|      0|# define __glibc_unlikely(cond)	__builtin_expect ((cond), 0)
  |  |  ------------------
  |  |  |  Branch (520:33): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  461|      0|            free (onealt);
  462|       |
  463|      0|          if (pglob->gl_pathc != firstc)
  ------------------
  |  Branch (463:15): [True: 0, False: 0]
  ------------------
  464|       |            /* We found some entries.  */
  465|      0|            return 0;
  466|      0|          else if (!(flags & (GLOB_NOCHECK|GLOB_NOMAGIC)))
  ------------------
  |  Branch (466:20): [True: 0, False: 0]
  ------------------
  467|      0|            return GLOB_NOMATCH;
  468|      0|        }
  469|      0|    }
  470|       |
  471|  78.0k| no_brace:
  472|  78.0k|  oldcount = pglob->gl_pathc + pglob->gl_offs;
  473|       |
  474|       |  /* Find the filename.  */
  475|  78.0k|  filename = strrchr (pattern, '/');
  476|       |
  477|       |#if defined __MSDOS__ || defined WINDOWS32
  478|       |  /* The case of "d:pattern".  Since ':' is not allowed in
  479|       |     file names, we can safely assume that wherever it
  480|       |     happens in pattern, it signals the filename part.  This
  481|       |     is so we could some day support patterns like "[a-z]:foo".  */
  482|       |  if (filename == NULL)
  483|       |    filename = strchr (pattern, ':');
  484|       |#endif /* __MSDOS__ || WINDOWS32 */
  485|       |
  486|  78.0k|  dirname_modified = 0;
  487|  78.0k|  if (filename == NULL)
  ------------------
  |  Branch (487:7): [True: 35.3k, False: 42.7k]
  ------------------
  488|  35.3k|    {
  489|       |      /* This can mean two things: a simple name or "~name".  The latter
  490|       |         case is nothing but a notation for a directory.  */
  491|  35.3k|      if ((flags & (GLOB_TILDE|GLOB_TILDE_CHECK)) && pattern[0] == '~')
  ------------------
  |  Branch (491:11): [True: 35.2k, False: 136]
  |  Branch (491:54): [True: 13.2k, False: 21.9k]
  ------------------
  492|  13.2k|        {
  493|  13.2k|          dirname = (char *) pattern;
  494|  13.2k|          dirlen = strlen (pattern);
  495|       |
  496|       |          /* Set FILENAME to NULL as a special flag.  This is ugly but
  497|       |             other solutions would require much more code.  We test for
  498|       |             this special case below.  */
  499|  13.2k|          filename = NULL;
  500|  13.2k|        }
  501|  22.1k|      else
  502|  22.1k|        {
  503|  22.1k|          if (__glibc_unlikely (pattern[0] == '\0'))
  ------------------
  |  |  520|  22.1k|# define __glibc_unlikely(cond)	__builtin_expect ((cond), 0)
  |  |  ------------------
  |  |  |  Branch (520:33): [True: 7, False: 22.1k]
  |  |  ------------------
  ------------------
  504|      7|            {
  505|      7|              dirs.gl_pathv = NULL;
  506|      7|              goto no_matches;
  507|      7|            }
  508|       |
  509|  22.1k|          filename = pattern;
  510|  22.1k|          dirname = (char *) ".";
  511|  22.1k|          dirlen = 0;
  512|  22.1k|        }
  513|  35.3k|    }
  514|  42.7k|  else if (filename == pattern
  ------------------
  |  Branch (514:12): [True: 294, False: 42.4k]
  ------------------
  515|  42.7k|           || (filename == pattern + 1 && pattern[0] == '\\'
  ------------------
  |  Branch (515:16): [True: 839, False: 41.5k]
  |  Branch (515:43): [True: 235, False: 604]
  ------------------
  516|  42.4k|               && (flags & GLOB_NOESCAPE) == 0))
  ------------------
  |  Branch (516:19): [True: 235, False: 0]
  ------------------
  517|    529|    {
  518|       |      /* "/pattern" or "\\/pattern".  */
  519|    529|      dirname = (char *) "/";
  520|    529|      dirlen = 1;
  521|    529|      ++filename;
  522|    529|    }
  523|  42.1k|  else
  524|  42.1k|    {
  525|  42.1k|      char *newp;
  526|  42.1k|      dirlen = filename - pattern;
  527|       |#if defined __MSDOS__ || defined WINDOWS32
  528|       |      if (*filename == ':'
  529|       |          || (filename > pattern + 1 && filename[-1] == ':'))
  530|       |        {
  531|       |          char *drive_spec;
  532|       |
  533|       |          ++dirlen;
  534|       |          drive_spec = __alloca (dirlen + 1);
  535|       |          *((char *) mempcpy (drive_spec, pattern, dirlen)) = '\0';
  536|       |          /* For now, disallow wildcards in the drive spec, to
  537|       |             prevent infinite recursion in glob.  */
  538|       |          if (__glob_pattern_p (drive_spec, !(flags & GLOB_NOESCAPE)))
  539|       |            return GLOB_NOMATCH;
  540|       |          /* If this is "d:pattern", we need to copy ':' to DIRNAME
  541|       |             as well.  If it's "d:/pattern", don't remove the slash
  542|       |             from "d:/", since "d:" and "d:/" are not the same.*/
  543|       |        }
  544|       |#endif
  545|       |
  546|  42.1k|      if (glob_use_alloca (alloca_used, dirlen + 1))
  ------------------
  |  Branch (546:11): [True: 0, False: 42.1k]
  ------------------
  547|      0|        newp = alloca_account (dirlen + 1, alloca_used);
  ------------------
  |  |  201|      0|# define alloca_account(len, avar) ((void) (len), (void) (avar), (void *) 0)
  ------------------
  548|  42.1k|      else
  549|  42.1k|        {
  550|  42.1k|          newp = malloc (dirlen + 1);
  551|  42.1k|          if (newp == NULL)
  ------------------
  |  Branch (551:15): [True: 0, False: 42.1k]
  ------------------
  552|      0|            return GLOB_NOSPACE;
  553|  42.1k|          malloc_dirname = 1;
  554|  42.1k|        }
  555|  42.1k|      *((char *) mempcpy (newp, pattern, dirlen)) = '\0';
  556|  42.1k|      dirname = newp;
  557|  42.1k|      ++filename;
  558|       |
  559|       |#if defined __MSDOS__ || defined WINDOWS32
  560|       |      bool drive_root = (dirlen > 1
  561|       |                         && (dirname[dirlen - 1] == ':'
  562|       |                             || (dirlen > 2 && dirname[dirlen - 2] == ':'
  563|       |                                 && dirname[dirlen - 1] == '/')));
  564|       |#else
  565|  42.1k|      bool drive_root = false;
  566|  42.1k|#endif
  567|       |
  568|  42.1k|      if (filename[0] == '\0' && dirlen > 1 && !drive_root)
  ------------------
  |  Branch (568:11): [True: 38.1k, False: 3.98k]
  |  Branch (568:34): [True: 37.6k, False: 583]
  |  Branch (568:48): [True: 37.6k, False: 0]
  ------------------
  569|       |        /* "pattern/".  Expand "pattern", appending slashes.  */
  570|  37.6k|        {
  571|  37.6k|          int orig_flags = flags;
  572|  37.6k|          if (!(flags & GLOB_NOESCAPE) && dirname[dirlen - 1] == '\\')
  ------------------
  |  Branch (572:15): [True: 37.6k, False: 0]
  |  Branch (572:43): [True: 415, False: 37.1k]
  ------------------
  573|    415|            {
  574|       |              /* "pattern\\/".  Remove the final backslash if it hasn't
  575|       |                 been quoted.  */
  576|    415|              char *p = (char *) &dirname[dirlen - 1];
  577|       |
  578|    806|              while (p > dirname && p[-1] == '\\') --p;
  ------------------
  |  Branch (578:22): [True: 797, False: 9]
  |  Branch (578:37): [True: 391, False: 406]
  ------------------
  579|    415|              if ((&dirname[dirlen] - p) & 1)
  ------------------
  |  Branch (579:19): [True: 216, False: 199]
  ------------------
  580|    216|                {
  581|    216|                  *(char *) &dirname[--dirlen] = '\0';
  582|    216|                  flags &= ~(GLOB_NOCHECK | GLOB_NOMAGIC);
  583|    216|                }
  584|    415|            }
  585|  37.6k|          int val = __glob (dirname, flags | GLOB_MARK, errfunc, pglob);
  ------------------
  |  |   80|  37.6k|# define __glob                 glob
  ------------------
  586|  37.6k|          if (val == 0)
  ------------------
  |  Branch (586:15): [True: 14.7k, False: 22.8k]
  ------------------
  587|  14.7k|            pglob->gl_flags = ((pglob->gl_flags & ~GLOB_MARK)
  588|  14.7k|                               | (flags & GLOB_MARK));
  589|  22.8k|          else if (val == GLOB_NOMATCH && flags != orig_flags)
  ------------------
  |  Branch (589:20): [True: 22.8k, False: 0]
  |  Branch (589:43): [True: 0, False: 22.8k]
  ------------------
  590|      0|            {
  591|       |              /* Make sure globfree (&dirs); is a nop.  */
  592|      0|              dirs.gl_pathv = NULL;
  593|      0|              flags = orig_flags;
  594|      0|              oldcount = pglob->gl_pathc + pglob->gl_offs;
  595|      0|              goto no_matches;
  596|      0|            }
  597|  37.6k|          retval = val;
  598|  37.6k|          goto out;
  599|  37.6k|        }
  600|  42.1k|    }
  601|       |
  602|  40.4k|  if ((flags & (GLOB_TILDE|GLOB_TILDE_CHECK)) && dirname[0] == '~')
  ------------------
  |  Branch (602:7): [True: 38.6k, False: 1.82k]
  |  Branch (602:50): [True: 15.4k, False: 23.1k]
  ------------------
  603|  15.4k|    {
  604|  15.4k|      if (dirname[1] == '\0' || dirname[1] == '/'
  ------------------
  |  Branch (604:11): [True: 11.8k, False: 3.63k]
  |  Branch (604:33): [True: 279, False: 3.36k]
  ------------------
  605|  15.4k|          || (!(flags & GLOB_NOESCAPE) && dirname[1] == '\\'
  ------------------
  |  Branch (605:15): [True: 3.36k, False: 0]
  |  Branch (605:43): [True: 991, False: 2.36k]
  ------------------
  606|  3.36k|              && (dirname[2] == '\0' || dirname[2] == '/')))
  ------------------
  |  Branch (606:19): [True: 429, False: 562]
  |  Branch (606:41): [True: 253, False: 309]
  ------------------
  607|  12.8k|        {
  608|       |          /* Look up home directory.  */
  609|  12.8k|          char *home_dir = getenv ("HOME");
  610|  12.8k|          int malloc_home_dir = 0;
  611|  12.8k|          if (home_dir == NULL || home_dir[0] == '\0')
  ------------------
  |  Branch (611:15): [True: 0, False: 12.8k]
  |  Branch (611:35): [True: 0, False: 12.8k]
  ------------------
  612|      0|            {
  613|       |#ifdef WINDOWS32
  614|       |              /* Windows NT defines HOMEDRIVE and HOMEPATH.  But give
  615|       |                 preference to HOME, because the user can change HOME.  */
  616|       |              const char *home_drive = getenv ("HOMEDRIVE");
  617|       |              const char *home_path = getenv ("HOMEPATH");
  618|       |
  619|       |              if (home_drive != NULL && home_path != NULL)
  620|       |                {
  621|       |                  size_t home_drive_len = strlen (home_drive);
  622|       |                  size_t home_path_len = strlen (home_path);
  623|       |                  char *mem = alloca (home_drive_len + home_path_len + 1);
  624|       |
  625|       |                  memcpy (mem, home_drive, home_drive_len);
  626|       |                  memcpy (mem + home_drive_len, home_path, home_path_len + 1);
  627|       |                  home_dir = mem;
  628|       |                }
  629|       |              else
  630|       |                home_dir = "c:/users/default"; /* poor default */
  631|       |#else
  632|      0|              int err;
  633|      0|              struct passwd *p;
  634|      0|              struct passwd pwbuf;
  635|      0|              struct scratch_buffer s;
  636|      0|              scratch_buffer_init (&s);
  637|      0|              while (true)
  638|      0|                {
  639|      0|                  p = NULL;
  640|      0|                  err = __getlogin_r (s.data, s.length);
  ------------------
  |  |   81|      0|# define __getlogin_r(buf, len) getlogin_r (buf, len)
  ------------------
  641|      0|                  if (err == 0)
  ------------------
  |  Branch (641:23): [True: 0, False: 0]
  ------------------
  642|      0|                    {
  643|      0|# if defined HAVE_GETPWNAM_R || defined _LIBC
  644|      0|                      size_t ssize = strlen (s.data) + 1;
  645|      0|                      char *sdata = s.data;
  646|      0|                      err = getpwnam_r (sdata, &pwbuf, sdata + ssize,
  647|      0|                                        s.length - ssize, &p);
  648|       |# else
  649|       |                      p = getpwnam (s.data);
  650|       |                      if (p == NULL)
  651|       |                        err = errno;
  652|       |# endif
  653|      0|                    }
  654|      0|                  if (err != ERANGE)
  ------------------
  |  Branch (654:23): [True: 0, False: 0]
  ------------------
  655|      0|                    break;
  656|      0|                  if (!scratch_buffer_grow (&s))
  ------------------
  |  Branch (656:23): [True: 0, False: 0]
  ------------------
  657|      0|                    {
  658|      0|                      retval = GLOB_NOSPACE;
  659|      0|                      goto out;
  660|      0|                    }
  661|      0|                }
  662|      0|              if (err == 0)
  ------------------
  |  Branch (662:19): [True: 0, False: 0]
  ------------------
  663|      0|                {
  664|      0|                  home_dir = strdup (p->pw_dir);
  665|      0|                  malloc_home_dir = 1;
  666|      0|                }
  667|      0|              scratch_buffer_free (&s);
  668|      0|              if (err == 0 && home_dir == NULL)
  ------------------
  |  Branch (668:19): [True: 0, False: 0]
  |  Branch (668:31): [True: 0, False: 0]
  ------------------
  669|      0|                {
  670|      0|                  retval = GLOB_NOSPACE;
  671|      0|                  goto out;
  672|      0|                }
  673|      0|#endif /* WINDOWS32 */
  674|      0|            }
  675|  12.8k|          if (home_dir == NULL || home_dir[0] == '\0')
  ------------------
  |  Branch (675:15): [True: 0, False: 12.8k]
  |  Branch (675:35): [True: 0, False: 12.8k]
  ------------------
  676|      0|            {
  677|      0|              if (__glibc_unlikely (malloc_home_dir))
  ------------------
  |  |  520|      0|# define __glibc_unlikely(cond)	__builtin_expect ((cond), 0)
  |  |  ------------------
  |  |  |  Branch (520:33): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  678|      0|                free (home_dir);
  679|      0|              if (flags & GLOB_TILDE_CHECK)
  ------------------
  |  Branch (679:19): [True: 0, False: 0]
  ------------------
  680|      0|                {
  681|      0|                  retval = GLOB_NOMATCH;
  682|      0|                  goto out;
  683|      0|                }
  684|      0|              else
  685|      0|                {
  686|      0|                  home_dir = (char *) "~"; /* No luck.  */
  687|      0|                  malloc_home_dir = 0;
  688|      0|                }
  689|      0|            }
  690|       |          /* Now construct the full directory.  */
  691|  12.8k|          if (dirname[1] == '\0')
  ------------------
  |  Branch (691:15): [True: 11.8k, False: 961]
  ------------------
  692|  11.8k|            {
  693|  11.8k|              if (__glibc_unlikely (malloc_dirname))
  ------------------
  |  |  520|  11.8k|# define __glibc_unlikely(cond)	__builtin_expect ((cond), 0)
  |  |  ------------------
  |  |  |  Branch (520:33): [True: 263, False: 11.5k]
  |  |  ------------------
  ------------------
  694|    263|                free (dirname);
  695|       |
  696|  11.8k|              dirname = home_dir;
  697|  11.8k|              dirlen = strlen (dirname);
  698|  11.8k|              malloc_dirname = malloc_home_dir;
  699|  11.8k|            }
  700|    961|          else
  701|    961|            {
  702|    961|              char *newp;
  703|    961|              size_t home_len = strlen (home_dir);
  704|    961|              int use_alloca = glob_use_alloca (alloca_used, home_len + dirlen);
  705|    961|              if (use_alloca)
  ------------------
  |  Branch (705:19): [True: 0, False: 961]
  ------------------
  706|      0|                newp = alloca_account (home_len + dirlen, alloca_used);
  ------------------
  |  |  201|      0|# define alloca_account(len, avar) ((void) (len), (void) (avar), (void *) 0)
  ------------------
  707|    961|              else
  708|    961|                {
  709|    961|                  newp = malloc (home_len + dirlen);
  710|    961|                  if (newp == NULL)
  ------------------
  |  Branch (710:23): [True: 0, False: 961]
  ------------------
  711|      0|                    {
  712|      0|                      if (__glibc_unlikely (malloc_home_dir))
  ------------------
  |  |  520|      0|# define __glibc_unlikely(cond)	__builtin_expect ((cond), 0)
  |  |  ------------------
  |  |  |  Branch (520:33): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  713|      0|                        free (home_dir);
  714|      0|                      retval = GLOB_NOSPACE;
  715|      0|                      goto out;
  716|      0|                    }
  717|    961|                }
  718|       |
  719|    961|              mempcpy (mempcpy (newp, home_dir, home_len),
  720|    961|                       &dirname[1], dirlen);
  721|       |
  722|    961|              if (__glibc_unlikely (malloc_dirname))
  ------------------
  |  |  520|    961|# define __glibc_unlikely(cond)	__builtin_expect ((cond), 0)
  |  |  ------------------
  |  |  |  Branch (520:33): [True: 751, False: 210]
  |  |  ------------------
  ------------------
  723|    751|                free (dirname);
  724|       |
  725|    961|              dirname = newp;
  726|    961|              dirlen += home_len - 1;
  727|    961|              malloc_dirname = !use_alloca;
  728|       |
  729|    961|              if (__glibc_unlikely (malloc_home_dir))
  ------------------
  |  |  520|    961|# define __glibc_unlikely(cond)	__builtin_expect ((cond), 0)
  |  |  ------------------
  |  |  |  Branch (520:33): [True: 0, False: 961]
  |  |  ------------------
  ------------------
  730|      0|                free (home_dir);
  731|    961|            }
  732|  12.8k|          dirname_modified = 1;
  733|  12.8k|        }
  734|  2.67k|      else
  735|  2.67k|        {
  736|  2.67k|#ifndef WINDOWS32
  737|       |          /* Recognize ~user as a shorthand for the specified user's home
  738|       |             directory.  */
  739|  2.67k|          char *end_name = strchr (dirname, '/');
  740|  2.67k|          char *user_name;
  741|  2.67k|          int malloc_user_name = 0;
  742|  2.67k|          char *unescape = NULL;
  743|       |
  744|  2.67k|          if (!(flags & GLOB_NOESCAPE))
  ------------------
  |  Branch (744:15): [True: 2.67k, False: 0]
  ------------------
  745|  2.67k|            {
  746|  2.67k|              if (end_name == NULL)
  ------------------
  |  Branch (746:19): [True: 2.35k, False: 325]
  ------------------
  747|  2.35k|                {
  748|  2.35k|                  unescape = strchr (dirname, '\\');
  749|  2.35k|                  if (unescape)
  ------------------
  |  Branch (749:23): [True: 728, False: 1.62k]
  ------------------
  750|    728|                    end_name = strchr (unescape, '\0');
  751|  2.35k|                }
  752|    325|              else
  753|    325|                unescape = memchr (dirname, '\\', end_name - dirname);
  754|  2.67k|            }
  755|  2.67k|          if (end_name == NULL)
  ------------------
  |  Branch (755:15): [True: 1.62k, False: 1.05k]
  ------------------
  756|  1.62k|            user_name = dirname + 1;
  757|  1.05k|          else
  758|  1.05k|            {
  759|  1.05k|              char *newp;
  760|  1.05k|              if (glob_use_alloca (alloca_used, end_name - dirname))
  ------------------
  |  Branch (760:19): [True: 0, False: 1.05k]
  ------------------
  761|      0|                newp = alloca_account (end_name - dirname, alloca_used);
  ------------------
  |  |  201|      0|# define alloca_account(len, avar) ((void) (len), (void) (avar), (void *) 0)
  ------------------
  762|  1.05k|              else
  763|  1.05k|                {
  764|  1.05k|                  newp = malloc (end_name - dirname);
  765|  1.05k|                  if (newp == NULL)
  ------------------
  |  Branch (765:23): [True: 0, False: 1.05k]
  ------------------
  766|      0|                    {
  767|      0|                      retval = GLOB_NOSPACE;
  768|      0|                      goto out;
  769|      0|                    }
  770|  1.05k|                  malloc_user_name = 1;
  771|  1.05k|                }
  772|  1.05k|              if (unescape != NULL)
  ------------------
  |  Branch (772:19): [True: 728, False: 325]
  ------------------
  773|    728|                {
  774|    728|                  char *p = mempcpy (newp, dirname + 1,
  775|    728|                                     unescape - dirname - 1);
  776|    728|                  char *q = unescape;
  777|  1.54k|                  while (q != end_name)
  ------------------
  |  Branch (777:26): [True: 1.23k, False: 309]
  ------------------
  778|  1.23k|                    {
  779|  1.23k|                      if (*q == '\\')
  ------------------
  |  Branch (779:27): [True: 906, False: 332]
  ------------------
  780|    906|                        {
  781|    906|                          if (q + 1 == end_name)
  ------------------
  |  Branch (781:31): [True: 419, False: 487]
  ------------------
  782|    419|                            {
  783|       |                              /* "~fo\\o\\" unescape to user_name "foo\\",
  784|       |                                 but "~fo\\o\\/" unescape to user_name
  785|       |                                 "foo".  */
  786|    419|                              if (filename == NULL)
  ------------------
  |  Branch (786:35): [True: 210, False: 209]
  ------------------
  787|    210|                                *p++ = '\\';
  788|    419|                              break;
  789|    419|                            }
  790|    487|                          ++q;
  791|    487|                        }
  792|    819|                      *p++ = *q++;
  793|    819|                    }
  794|    728|                  *p = '\0';
  795|    728|                }
  796|    325|              else
  797|    325|                *((char *) mempcpy (newp, dirname + 1, end_name - dirname - 1))
  798|    325|                  = '\0';
  799|  1.05k|              user_name = newp;
  800|  1.05k|            }
  801|       |
  802|       |          /* Look up specific user's home directory.  */
  803|  2.67k|          {
  804|  2.67k|            struct passwd *p;
  805|  2.67k|            struct scratch_buffer pwtmpbuf;
  806|  2.67k|            scratch_buffer_init (&pwtmpbuf);
  807|       |
  808|  2.67k|#  if defined HAVE_GETPWNAM_R || defined _LIBC
  809|  2.67k|            struct passwd pwbuf;
  810|       |
  811|  2.67k|            while (getpwnam_r (user_name, &pwbuf,
  ------------------
  |  Branch (811:20): [True: 0, False: 2.67k]
  ------------------
  812|  2.67k|                               pwtmpbuf.data, pwtmpbuf.length, &p)
  813|  2.67k|                   == ERANGE)
  814|      0|              {
  815|      0|                if (!scratch_buffer_grow (&pwtmpbuf))
  ------------------
  |  Branch (815:21): [True: 0, False: 0]
  ------------------
  816|      0|                  {
  817|      0|                    retval = GLOB_NOSPACE;
  818|      0|                    goto out;
  819|      0|                  }
  820|      0|              }
  821|       |#  else
  822|       |            p = getpwnam (user_name);
  823|       |#  endif
  824|       |
  825|  2.67k|            if (__glibc_unlikely (malloc_user_name))
  ------------------
  |  |  520|  2.67k|# define __glibc_unlikely(cond)	__builtin_expect ((cond), 0)
  |  |  ------------------
  |  |  |  Branch (520:33): [True: 1.05k, False: 1.62k]
  |  |  ------------------
  ------------------
  826|  1.05k|              free (user_name);
  827|       |
  828|       |            /* If we found a home directory use this.  */
  829|  2.67k|            if (p != NULL)
  ------------------
  |  Branch (829:17): [True: 1.52k, False: 1.15k]
  ------------------
  830|  1.52k|              {
  831|  1.52k|                size_t home_len = strlen (p->pw_dir);
  832|  1.52k|                size_t rest_len = end_name == NULL ? 0 : strlen (end_name);
  ------------------
  |  Branch (832:35): [True: 955, False: 565]
  ------------------
  833|       |                /* dirname contains end_name; we can't free it now.  */
  834|  1.52k|                char *prev_dirname =
  835|  1.52k|                  (__glibc_unlikely (malloc_dirname) ? dirname : NULL);
  ------------------
  |  |  520|  1.52k|# define __glibc_unlikely(cond)	__builtin_expect ((cond), 0)
  |  |  ------------------
  |  |  |  Branch (520:33): [True: 1.23k, False: 288]
  |  |  ------------------
  ------------------
  836|  1.52k|                char *d;
  837|       |
  838|  1.52k|                malloc_dirname = 0;
  839|       |
  840|  1.52k|                if (glob_use_alloca (alloca_used, home_len + rest_len + 1))
  ------------------
  |  Branch (840:21): [True: 0, False: 1.52k]
  ------------------
  841|      0|                  dirname = alloca_account (home_len + rest_len + 1,
  ------------------
  |  |  201|      0|# define alloca_account(len, avar) ((void) (len), (void) (avar), (void *) 0)
  ------------------
  842|  1.52k|                                            alloca_used);
  843|  1.52k|                else
  844|  1.52k|                  {
  845|  1.52k|                    dirname = malloc (home_len + rest_len + 1);
  846|  1.52k|                    if (dirname == NULL)
  ------------------
  |  Branch (846:25): [True: 0, False: 1.52k]
  ------------------
  847|      0|                      {
  848|      0|                        free (prev_dirname);
  849|      0|                        scratch_buffer_free (&pwtmpbuf);
  850|      0|                        retval = GLOB_NOSPACE;
  851|      0|                        goto out;
  852|      0|                      }
  853|  1.52k|                    malloc_dirname = 1;
  854|  1.52k|                  }
  855|  1.52k|                d = mempcpy (dirname, p->pw_dir, home_len);
  856|  1.52k|                if (end_name != NULL)
  ------------------
  |  Branch (856:21): [True: 565, False: 955]
  ------------------
  857|    565|                  d = mempcpy (d, end_name, rest_len);
  858|  1.52k|                *d = '\0';
  859|       |
  860|  1.52k|                free (prev_dirname);
  861|       |
  862|  1.52k|                dirlen = home_len + rest_len;
  863|  1.52k|                dirname_modified = 1;
  864|  1.52k|              }
  865|  1.15k|            else
  866|  1.15k|              {
  867|  1.15k|                if (flags & GLOB_TILDE_CHECK)
  ------------------
  |  Branch (867:21): [True: 0, False: 1.15k]
  ------------------
  868|      0|                  {
  869|       |                    /* We have to regard it as an error if we cannot find the
  870|       |                       home directory.  */
  871|      0|                    retval = GLOB_NOMATCH;
  872|      0|                    goto out;
  873|      0|                  }
  874|  1.15k|              }
  875|  2.67k|            scratch_buffer_free (&pwtmpbuf);
  876|  2.67k|          }
  877|       |#else /* WINDOWS32 */
  878|       |          /* On native Windows, access to a user's home directory
  879|       |             (via GetUserProfileDirectory) or to a user's environment
  880|       |             variables (via ExpandEnvironmentStringsForUser) requires
  881|       |             the credentials of the user.  Therefore we cannot support
  882|       |             the ~user syntax on this platform.
  883|       |             Handling ~user specially (and treat it like plain ~) if
  884|       |             user is getenv ("USERNAME") would not be a good idea,
  885|       |             since it would make people think that ~user is supported
  886|       |             in general.  */
  887|       |          if (flags & GLOB_TILDE_CHECK)
  888|       |            {
  889|       |              retval = GLOB_NOMATCH;
  890|       |              goto out;
  891|       |            }
  892|       |#endif /* WINDOWS32 */
  893|  2.67k|        }
  894|  15.4k|    }
  895|       |
  896|       |  /* Now test whether we looked for "~" or "~NAME".  In this case we
  897|       |     can give the answer now.  */
  898|  40.4k|  if (filename == NULL)
  ------------------
  |  Branch (898:7): [True: 13.2k, False: 27.1k]
  ------------------
  899|  13.2k|    {
  900|  13.2k|      size_t newcount = pglob->gl_pathc + pglob->gl_offs;
  901|  13.2k|      char **new_gl_pathv;
  902|       |
  903|  13.2k|      if (newcount > SIZE_MAX / sizeof (char *) - 2)
  ------------------
  |  Branch (903:11): [True: 0, False: 13.2k]
  ------------------
  904|      0|        {
  905|      0|        nospace:
  906|      0|          free (pglob->gl_pathv);
  907|      0|          pglob->gl_pathv = NULL;
  908|      0|          pglob->gl_pathc = 0;
  909|      0|          retval = GLOB_NOSPACE;
  910|      0|          goto out;
  911|      0|        }
  912|       |
  913|  13.2k|      new_gl_pathv = realloc (pglob->gl_pathv,
  914|  13.2k|                              (newcount + 2) * sizeof (char *));
  915|  13.2k|      if (new_gl_pathv == NULL)
  ------------------
  |  Branch (915:11): [True: 0, False: 13.2k]
  ------------------
  916|      0|        goto nospace;
  917|  13.2k|      pglob->gl_pathv = new_gl_pathv;
  918|       |
  919|  13.2k|      if (flags & GLOB_MARK && is_dir (dirname, flags, pglob))
  ------------------
  |  Branch (919:11): [True: 568, False: 12.6k]
  |  Branch (919:32): [True: 498, False: 70]
  ------------------
  920|    498|        {
  921|    498|          char *p;
  922|    498|          pglob->gl_pathv[newcount] = malloc (dirlen + 2);
  923|    498|          if (pglob->gl_pathv[newcount] == NULL)
  ------------------
  |  Branch (923:15): [True: 0, False: 498]
  ------------------
  924|      0|            goto nospace;
  925|    498|          p = mempcpy (pglob->gl_pathv[newcount], dirname, dirlen);
  926|    498|          p[0] = '/';
  927|    498|          p[1] = '\0';
  928|    498|          if (__glibc_unlikely (malloc_dirname))
  ------------------
  |  |  520|    498|# define __glibc_unlikely(cond)	__builtin_expect ((cond), 0)
  |  |  ------------------
  |  |  |  Branch (520:33): [True: 208, False: 290]
  |  |  ------------------
  ------------------
  929|    208|            free (dirname);
  930|    498|        }
  931|  12.7k|      else
  932|  12.7k|        {
  933|  12.7k|          if (__glibc_unlikely (malloc_dirname))
  ------------------
  |  |  520|  12.7k|# define __glibc_unlikely(cond)	__builtin_expect ((cond), 0)
  |  |  ------------------
  |  |  |  Branch (520:33): [True: 290, False: 12.4k]
  |  |  ------------------
  ------------------
  934|    290|            pglob->gl_pathv[newcount] = dirname;
  935|  12.4k|          else
  936|  12.4k|            {
  937|  12.4k|              pglob->gl_pathv[newcount] = strdup (dirname);
  938|  12.4k|              if (pglob->gl_pathv[newcount] == NULL)
  ------------------
  |  Branch (938:19): [True: 0, False: 12.4k]
  ------------------
  939|      0|                goto nospace;
  940|  12.4k|            }
  941|  12.7k|        }
  942|  13.2k|      pglob->gl_pathv[++newcount] = NULL;
  943|  13.2k|      ++pglob->gl_pathc;
  944|  13.2k|      pglob->gl_flags = flags;
  945|       |
  946|  13.2k|      return 0;
  947|  13.2k|    }
  948|       |
  949|  27.1k|  meta = __glob_pattern_type (dirname, !(flags & GLOB_NOESCAPE));
  950|       |  /* meta is 1 if correct glob pattern containing metacharacters.
  951|       |     If meta has bit (1 << 2) set, it means there was an unterminated
  952|       |     [ which we handle the same, using fnmatch.  Broken unterminated
  953|       |     pattern bracket expressions ought to be rare enough that it is
  954|       |     not worth special casing them, fnmatch will do the right thing.  */
  955|  27.1k|  if (meta & (GLOBPAT_SPECIAL | GLOBPAT_BRACKET))
  ------------------
  |  Branch (955:7): [True: 1.82k, False: 25.3k]
  ------------------
  956|  1.82k|    {
  957|       |      /* The directory name contains metacharacters, so we
  958|       |         have to glob for the directory, and then glob for
  959|       |         the pattern in each directory found.  */
  960|  1.82k|      size_t i;
  961|       |
  962|  1.82k|      if (!(flags & GLOB_NOESCAPE) && dirlen > 0 && dirname[dirlen - 1] == '\\')
  ------------------
  |  Branch (962:11): [True: 1.82k, False: 0]
  |  Branch (962:39): [True: 1.82k, False: 0]
  |  Branch (962:53): [True: 412, False: 1.41k]
  ------------------
  963|    412|        {
  964|       |          /* "foo\\/bar".  Remove the final backslash from dirname
  965|       |             if it has not been quoted.  */
  966|    412|          char *p = (char *) &dirname[dirlen - 1];
  967|       |
  968|    985|          while (p > dirname && p[-1] == '\\') --p;
  ------------------
  |  Branch (968:18): [True: 985, False: 0]
  |  Branch (968:33): [True: 573, False: 412]
  ------------------
  969|    412|          if ((&dirname[dirlen] - p) & 1)
  ------------------
  |  Branch (969:15): [True: 211, False: 201]
  ------------------
  970|    211|            *(char *) &dirname[--dirlen] = '\0';
  971|    412|        }
  972|       |
  973|  1.82k|      if (__glibc_unlikely ((flags & GLOB_ALTDIRFUNC) != 0))
  ------------------
  |  |  520|  1.82k|# define __glibc_unlikely(cond)	__builtin_expect ((cond), 0)
  |  |  ------------------
  |  |  |  Branch (520:33): [True: 0, False: 1.82k]
  |  |  ------------------
  ------------------
  974|      0|        {
  975|       |          /* Use the alternative access functions also in the recursive
  976|       |             call.  */
  977|      0|          dirs.gl_opendir = pglob->gl_opendir;
  978|      0|          dirs.gl_readdir = pglob->gl_readdir;
  979|      0|          dirs.gl_closedir = pglob->gl_closedir;
  980|      0|          dirs.gl_stat = pglob->gl_stat;
  981|      0|          dirs.gl_lstat = pglob->gl_lstat;
  982|      0|        }
  983|       |
  984|  1.82k|      status = __glob (dirname,
  ------------------
  |  |   80|  1.82k|# define __glob                 glob
  ------------------
  985|  1.82k|                       ((flags & (GLOB_ERR | GLOB_NOESCAPE | GLOB_ALTDIRFUNC))
  986|  1.82k|                        | GLOB_NOSORT | GLOB_ONLYDIR),
  987|  1.82k|                       errfunc, &dirs);
  988|  1.82k|      if (status != 0)
  ------------------
  |  Branch (988:11): [True: 1.82k, False: 0]
  ------------------
  989|  1.82k|        {
  990|  1.82k|          if ((flags & GLOB_NOCHECK) == 0 || status != GLOB_NOMATCH)
  ------------------
  |  Branch (990:15): [True: 1.82k, False: 0]
  |  Branch (990:46): [True: 0, False: 0]
  ------------------
  991|  1.82k|            {
  992|  1.82k|              retval = status;
  993|  1.82k|              goto out;
  994|  1.82k|            }
  995|      0|          goto no_matches;
  996|  1.82k|        }
  997|       |
  998|       |      /* We have successfully globbed the preceding directory name.
  999|       |         For each name we found, call glob_in_dir on it and FILENAME,
 1000|       |         appending the results to PGLOB.  */
 1001|      0|      for (i = 0; i < dirs.gl_pathc; ++i)
  ------------------
  |  Branch (1001:19): [True: 0, False: 0]
  ------------------
 1002|      0|        {
 1003|      0|          size_t old_pathc;
 1004|       |
 1005|      0|          old_pathc = pglob->gl_pathc;
 1006|      0|          status = glob_in_dir (filename, dirs.gl_pathv[i],
 1007|      0|                                ((flags | GLOB_APPEND)
 1008|      0|                                 & ~(GLOB_NOCHECK | GLOB_NOMAGIC)),
 1009|      0|                                errfunc, pglob, alloca_used);
 1010|      0|          if (status == GLOB_NOMATCH)
  ------------------
  |  Branch (1010:15): [True: 0, False: 0]
  ------------------
 1011|       |            /* No matches in this directory.  Try the next.  */
 1012|      0|            continue;
 1013|       |
 1014|      0|          if (status != 0)
  ------------------
  |  Branch (1014:15): [True: 0, False: 0]
  ------------------
 1015|      0|            {
 1016|      0|              globfree (&dirs);
 1017|      0|              globfree (pglob);
 1018|      0|              pglob->gl_pathc = 0;
 1019|      0|              retval = status;
 1020|      0|              goto out;
 1021|      0|            }
 1022|       |
 1023|       |          /* Stick the directory on the front of each name.  */
 1024|      0|          if (prefix_array (dirs.gl_pathv[i],
  ------------------
  |  Branch (1024:15): [True: 0, False: 0]
  ------------------
 1025|      0|                            &pglob->gl_pathv[old_pathc + pglob->gl_offs],
 1026|      0|                            pglob->gl_pathc - old_pathc))
 1027|      0|            {
 1028|      0|              globfree (&dirs);
 1029|      0|              globfree (pglob);
 1030|      0|              pglob->gl_pathc = 0;
 1031|      0|              retval = GLOB_NOSPACE;
 1032|      0|              goto out;
 1033|      0|            }
 1034|      0|        }
 1035|       |
 1036|      0|      flags |= GLOB_MAGCHAR;
 1037|       |
 1038|       |      /* We have ignored the GLOB_NOCHECK flag in the 'glob_in_dir' calls.
 1039|       |         But if we have not found any matching entry and the GLOB_NOCHECK
 1040|       |         flag was set we must return the input pattern itself.  */
 1041|      0|      if (pglob->gl_pathc + pglob->gl_offs == oldcount)
  ------------------
  |  Branch (1041:11): [True: 0, False: 0]
  ------------------
 1042|      0|        {
 1043|      7|        no_matches:
 1044|       |          /* No matches.  */
 1045|      7|          if (flags & GLOB_NOCHECK)
  ------------------
  |  Branch (1045:15): [True: 0, False: 7]
  ------------------
 1046|      0|            {
 1047|      0|              size_t newcount = pglob->gl_pathc + pglob->gl_offs;
 1048|      0|              char **new_gl_pathv;
 1049|       |
 1050|      0|              if (newcount > SIZE_MAX / sizeof (char *) - 2)
  ------------------
  |  Branch (1050:19): [True: 0, False: 0]
  ------------------
 1051|      0|                {
 1052|      0|                nospace2:
 1053|      0|                  globfree (&dirs);
 1054|      0|                  retval = GLOB_NOSPACE;
 1055|      0|                  goto out;
 1056|      0|                }
 1057|       |
 1058|      0|              new_gl_pathv = realloc (pglob->gl_pathv,
 1059|      0|                                      (newcount + 2) * sizeof (char *));
 1060|      0|              if (new_gl_pathv == NULL)
  ------------------
  |  Branch (1060:19): [True: 0, False: 0]
  ------------------
 1061|      0|                goto nospace2;
 1062|      0|              pglob->gl_pathv = new_gl_pathv;
 1063|       |
 1064|      0|              pglob->gl_pathv[newcount] = strdup (pattern);
 1065|      0|              if (pglob->gl_pathv[newcount] == NULL)
  ------------------
  |  Branch (1065:19): [True: 0, False: 0]
  ------------------
 1066|      0|                {
 1067|      0|                  globfree (&dirs);
 1068|      0|                  globfree (pglob);
 1069|      0|                  pglob->gl_pathc = 0;
 1070|      0|                  retval = GLOB_NOSPACE;
 1071|      0|                  goto out;
 1072|      0|                }
 1073|       |
 1074|      0|              ++pglob->gl_pathc;
 1075|      0|              ++newcount;
 1076|       |
 1077|      0|              pglob->gl_pathv[newcount] = NULL;
 1078|      0|              pglob->gl_flags = flags;
 1079|      0|            }
 1080|      7|          else
 1081|      7|            {
 1082|      7|              globfree (&dirs);
 1083|      7|              retval = GLOB_NOMATCH;
 1084|      7|              goto out;
 1085|      7|            }
 1086|      7|        }
 1087|       |
 1088|      0|      globfree (&dirs);
 1089|      0|    }
 1090|  25.3k|  else
 1091|  25.3k|    {
 1092|  25.3k|      size_t old_pathc = pglob->gl_pathc;
 1093|  25.3k|      int orig_flags = flags;
 1094|       |
 1095|  25.3k|      if (meta & GLOBPAT_BACKSLASH)
  ------------------
  |  Branch (1095:11): [True: 873, False: 24.5k]
  ------------------
 1096|    873|        {
 1097|    873|          char *p = strchr (dirname, '\\'), *q;
 1098|       |          /* We need to unescape the dirname string.  It is certainly
 1099|       |             allocated by alloca, as otherwise filename would be NULL
 1100|       |             or dirname wouldn't contain backslashes.  */
 1101|    873|          q = p;
 1102|    873|          do
 1103|  1.66k|            {
 1104|  1.66k|              if (*p == '\\')
  ------------------
  |  Branch (1104:19): [True: 968, False: 700]
  ------------------
 1105|    968|                {
 1106|    968|                  *q = *++p;
 1107|    968|                  --dirlen;
 1108|    968|                }
 1109|    700|              else
 1110|    700|                *q = *p;
 1111|  1.66k|              ++q;
 1112|  1.66k|            }
 1113|  1.66k|          while (*p++ != '\0');
  ------------------
  |  Branch (1113:18): [True: 795, False: 873]
  ------------------
 1114|    873|          dirname_modified = 1;
 1115|    873|        }
 1116|  25.3k|      if (dirname_modified)
  ------------------
  |  Branch (1116:11): [True: 2.44k, False: 22.9k]
  ------------------
 1117|  2.44k|        flags &= ~(GLOB_NOCHECK | GLOB_NOMAGIC);
 1118|  25.3k|      status = glob_in_dir (filename, dirname, flags, errfunc, pglob,
 1119|  25.3k|                            alloca_used);
 1120|  25.3k|      if (status != 0)
  ------------------
  |  Branch (1120:11): [True: 21.6k, False: 3.75k]
  ------------------
 1121|  21.6k|        {
 1122|  21.6k|          if (status == GLOB_NOMATCH && flags != orig_flags
  ------------------
  |  Branch (1122:15): [True: 21.6k, False: 0]
  |  Branch (1122:41): [True: 0, False: 21.6k]
  ------------------
 1123|  21.6k|              && pglob->gl_pathc + pglob->gl_offs == oldcount)
  ------------------
  |  Branch (1123:18): [True: 0, False: 0]
  ------------------
 1124|      0|            {
 1125|       |              /* Make sure globfree (&dirs); is a nop.  */
 1126|      0|              dirs.gl_pathv = NULL;
 1127|      0|              flags = orig_flags;
 1128|      0|              goto no_matches;
 1129|      0|            }
 1130|  21.6k|          retval = status;
 1131|  21.6k|          goto out;
 1132|  21.6k|        }
 1133|       |
 1134|  3.75k|      if (dirlen > 0)
  ------------------
  |  Branch (1134:11): [True: 3.17k, False: 584]
  ------------------
 1135|  3.17k|        {
 1136|       |          /* Stick the directory on the front of each name.  */
 1137|  3.17k|          if (prefix_array (dirname,
  ------------------
  |  Branch (1137:15): [True: 0, False: 3.17k]
  ------------------
 1138|  3.17k|                            &pglob->gl_pathv[old_pathc + pglob->gl_offs],
 1139|  3.17k|                            pglob->gl_pathc - old_pathc))
 1140|      0|            {
 1141|      0|              globfree (pglob);
 1142|      0|              pglob->gl_pathc = 0;
 1143|      0|              retval = GLOB_NOSPACE;
 1144|      0|              goto out;
 1145|      0|            }
 1146|  3.17k|        }
 1147|  3.75k|    }
 1148|       |
 1149|  3.75k|  if (flags & GLOB_MARK)
  ------------------
  |  Branch (1149:7): [True: 3.75k, False: 0]
  ------------------
 1150|  3.75k|    {
 1151|       |      /* Append slashes to directory names.  */
 1152|  3.75k|      size_t i;
 1153|       |
 1154|  7.51k|      for (i = oldcount; i < pglob->gl_pathc + pglob->gl_offs; ++i)
  ------------------
  |  Branch (1154:26): [True: 3.75k, False: 3.75k]
  ------------------
 1155|  3.75k|        if (is_dir (pglob->gl_pathv[i], flags, pglob))
  ------------------
  |  Branch (1155:13): [True: 2.93k, False: 822]
  ------------------
 1156|  2.93k|          {
 1157|  2.93k|            size_t len = strlen (pglob->gl_pathv[i]) + 2;
 1158|  2.93k|            char *new = realloc (pglob->gl_pathv[i], len);
 1159|  2.93k|            if (new == NULL)
  ------------------
  |  Branch (1159:17): [True: 0, False: 2.93k]
  ------------------
 1160|      0|              {
 1161|      0|                globfree (pglob);
 1162|      0|                pglob->gl_pathc = 0;
 1163|      0|                retval = GLOB_NOSPACE;
 1164|      0|                goto out;
 1165|      0|              }
 1166|  2.93k|            strcpy (&new[len - 2], "/");
 1167|  2.93k|            pglob->gl_pathv[i] = new;
 1168|  2.93k|          }
 1169|  3.75k|    }
 1170|       |
 1171|  3.75k|  if (!(flags & GLOB_NOSORT))
  ------------------
  |  Branch (1171:7): [True: 3.75k, False: 0]
  ------------------
 1172|  3.75k|    {
 1173|       |      /* Sort the vector.  */
 1174|  3.75k|      qsort (&pglob->gl_pathv[oldcount],
 1175|  3.75k|             pglob->gl_pathc + pglob->gl_offs - oldcount,
 1176|  3.75k|             sizeof (char *), collated_compare);
 1177|  3.75k|    }
 1178|       |
 1179|  64.8k| out:
 1180|  64.8k|  if (__glibc_unlikely (malloc_dirname))
  ------------------
  |  |  520|  64.8k|# define __glibc_unlikely(cond)	__builtin_expect ((cond), 0)
  |  |  ------------------
  |  |  |  Branch (520:33): [True: 41.9k, False: 22.9k]
  |  |  ------------------
  ------------------
 1181|  41.9k|    free (dirname);
 1182|       |
 1183|  64.8k|  return retval;
 1184|  3.75k|}
glob.c:glob_use_alloca:
  224|  70.8k|{
  225|  70.8k|  size_t size;
  226|  70.8k|  return (!ckd_add (&size, alloca_used, len)
  ------------------
  |  |   32|   141k|#define ckd_add(r, a, b) ((bool) _GL_INT_ADD_WRAPV (a, b, r))
  |  |  ------------------
  |  |  |  |  152|  70.8k|# define _GL_INT_ADD_WRAPV(a, b, r) __builtin_add_overflow (a, b, r)
  |  |  ------------------
  ------------------
  |  Branch (226:11): [True: 70.8k, False: 0]
  ------------------
  227|  70.8k|          && __libc_use_alloca (size));
  ------------------
  |  |  200|  70.8k|# define __libc_use_alloca(n) false
  ------------------
  228|  70.8k|}
glob.c:is_dir:
  241|  4.32k|{
  242|  4.32k|  struct_stat st;
  ------------------
  |  |   88|  4.32k|# define struct_stat            struct stat
  ------------------
  243|  4.32k|  struct_stat64 st64;
  ------------------
  |  |   89|  4.32k|# define struct_stat64          struct stat
  ------------------
  244|  4.32k|  return (__glibc_unlikely (flags & GLOB_ALTDIRFUNC)
  ------------------
  |  |  520|  4.32k|# define __glibc_unlikely(cond)	__builtin_expect ((cond), 0)
  |  |  ------------------
  |  |  |  Branch (520:33): [True: 0, False: 4.32k]
  |  |  ------------------
  ------------------
  245|  4.32k|          ? pglob->gl_stat (filename, &st) == 0 && S_ISDIR (st.st_mode)
  ------------------
  |  Branch (245:13): [True: 0, False: 0]
  ------------------
  246|  4.32k|          : (GLOB_FSTATAT64 (AT_FDCWD, filename, &st64, 0) == 0
  ------------------
  |  |   91|  4.32k|# define GLOB_FSTATAT64         fstatat
  ------------------
  |  Branch (246:14): [True: 4.25k, False: 70]
  ------------------
  247|  4.32k|             && S_ISDIR (st64.st_mode)));
  248|  4.32k|}
glob.c:prefix_array:
 1214|  3.17k|{
 1215|  3.17k|  size_t i;
 1216|  3.17k|  size_t dirlen = strlen (dirname);
 1217|  3.17k|  char dirsep_char = '/';
 1218|       |
 1219|  3.17k|  if (dirlen == 1 && dirname[0] == '/')
  ------------------
  |  Branch (1219:7): [True: 926, False: 2.24k]
  |  Branch (1219:22): [True: 717, False: 209]
  ------------------
 1220|       |    /* DIRNAME is just "/", so normal prepending would get us "//foo".
 1221|       |       We want "/foo" instead, so don't prepend any chars from DIRNAME.  */
 1222|    717|    dirlen = 0;
 1223|       |
 1224|       |#if defined __MSDOS__ || defined WINDOWS32
 1225|       |  if (dirlen > 1)
 1226|       |    {
 1227|       |      if (dirname[dirlen - 1] == '/' && dirname[dirlen - 2] == ':')
 1228|       |        /* DIRNAME is "d:/".  Don't prepend the slash from DIRNAME.  */
 1229|       |        --dirlen;
 1230|       |      else if (dirname[dirlen - 1] == ':')
 1231|       |        {
 1232|       |          /* DIRNAME is "d:".  Use ':' instead of '/'.  */
 1233|       |          --dirlen;
 1234|       |          dirsep_char = ':';
 1235|       |        }
 1236|       |    }
 1237|       |#endif
 1238|       |
 1239|  6.34k|  for (i = 0; i < n; ++i)
  ------------------
  |  Branch (1239:15): [True: 3.17k, False: 3.17k]
  ------------------
 1240|  3.17k|    {
 1241|  3.17k|      size_t eltlen = strlen (array[i]) + 1;
 1242|  3.17k|      char *new = malloc (dirlen + 1 + eltlen);
 1243|  3.17k|      if (new == NULL)
  ------------------
  |  Branch (1243:11): [True: 0, False: 3.17k]
  ------------------
 1244|      0|        {
 1245|      0|          while (i > 0)
  ------------------
  |  Branch (1245:18): [True: 0, False: 0]
  ------------------
 1246|      0|            free (array[--i]);
 1247|      0|          return 1;
 1248|      0|        }
 1249|       |
 1250|  3.17k|      {
 1251|  3.17k|        char *endp = mempcpy (new, dirname, dirlen);
 1252|  3.17k|        *endp++ = dirsep_char;
 1253|  3.17k|        mempcpy (endp, array[i], eltlen);
 1254|  3.17k|      }
 1255|  3.17k|      free (array[i]);
 1256|  3.17k|      array[i] = new;
 1257|  3.17k|    }
 1258|       |
 1259|  3.17k|  return 0;
 1260|  3.17k|}
glob.c:glob_in_dir:
 1270|  25.3k|{
 1271|  25.3k|  size_t dirlen = strlen (directory);
 1272|  25.3k|  void *stream = NULL;
 1273|  25.3k|  struct scratch_buffer s;
 1274|  25.3k|  scratch_buffer_init (&s);
 1275|  25.3k|# define GLOBNAMES_MEMBERS(nnames) \
 1276|  25.3k|    struct globnames *next; size_t count; char *name[nnames];
 1277|  25.3k|  struct globnames { GLOBNAMES_MEMBERS (FLEXIBLE_ARRAY_MEMBER) };
 1278|  25.3k|  struct { GLOBNAMES_MEMBERS (64) } init_names_buf;
 1279|  25.3k|  struct globnames *init_names = (struct globnames *) &init_names_buf;
 1280|  25.3k|  struct globnames *names = init_names;
 1281|  25.3k|  struct globnames *names_alloca = init_names;
 1282|  25.3k|  size_t nfound = 0;
 1283|  25.3k|  size_t cur = 0;
 1284|  25.3k|  int meta;
 1285|  25.3k|  int save;
 1286|  25.3k|  int result;
 1287|       |
 1288|  25.3k|  alloca_used += sizeof init_names_buf;
 1289|       |
 1290|  25.3k|  init_names->next = NULL;
 1291|  25.3k|  init_names->count = ((sizeof init_names_buf
 1292|  25.3k|                        - offsetof (struct globnames, name))
 1293|  25.3k|                       / sizeof init_names->name[0]);
 1294|       |
 1295|  25.3k|  meta = __glob_pattern_type (pattern, !(flags & GLOB_NOESCAPE));
 1296|  25.3k|  if (meta == GLOBPAT_NONE && (flags & (GLOB_NOCHECK|GLOB_NOMAGIC)))
  ------------------
  |  Branch (1296:7): [True: 25.1k, False: 197]
  |  Branch (1296:31): [True: 0, False: 25.1k]
  ------------------
 1297|      0|    {
 1298|       |      /* We need not do any tests.  The PATTERN contains no meta
 1299|       |         characters and we must not return an error therefore the
 1300|       |         result will always contain exactly one name.  */
 1301|      0|      flags |= GLOB_NOCHECK;
 1302|      0|    }
 1303|  25.3k|  else if (meta == GLOBPAT_NONE)
  ------------------
  |  Branch (1303:12): [True: 25.1k, False: 197]
  ------------------
 1304|  25.1k|    {
 1305|  25.1k|      size_t patlen = strlen (pattern);
 1306|  25.1k|      size_t fullsize;
 1307|  25.1k|      bool alloca_fullname
 1308|  25.1k|        = (!ckd_add (&fullsize, dirlen + 1, patlen + 1)
  ------------------
  |  |   32|  50.3k|#define ckd_add(r, a, b) ((bool) _GL_INT_ADD_WRAPV (a, b, r))
  |  |  ------------------
  |  |  |  |  152|  25.1k|# define _GL_INT_ADD_WRAPV(a, b, r) __builtin_add_overflow (a, b, r)
  |  |  ------------------
  ------------------
  |  Branch (1308:12): [True: 25.1k, False: 0]
  ------------------
 1309|  25.1k|           && glob_use_alloca (alloca_used, fullsize));
  ------------------
  |  Branch (1309:15): [True: 0, False: 25.1k]
  ------------------
 1310|  25.1k|      char *fullname;
 1311|  25.1k|      if (alloca_fullname)
  ------------------
  |  Branch (1311:11): [True: 0, False: 25.1k]
  ------------------
 1312|      0|        fullname = alloca_account (fullsize, alloca_used);
  ------------------
  |  |  201|      0|# define alloca_account(len, avar) ((void) (len), (void) (avar), (void *) 0)
  ------------------
 1313|  25.1k|      else
 1314|  25.1k|        {
 1315|  25.1k|          fullname = malloc (fullsize);
 1316|  25.1k|          if (fullname == NULL)
  ------------------
  |  Branch (1316:15): [True: 0, False: 25.1k]
  ------------------
 1317|      0|            return GLOB_NOSPACE;
 1318|  25.1k|        }
 1319|       |
 1320|  25.1k|      mempcpy (mempcpy (mempcpy (fullname, directory, dirlen),
 1321|  25.1k|                        "/", 1),
 1322|  25.1k|               pattern, patlen + 1);
 1323|  25.1k|      if (glob_lstat (pglob, flags, fullname) == 0
  ------------------
  |  Branch (1323:11): [True: 3.75k, False: 21.4k]
  ------------------
 1324|  25.1k|          || errno == EOVERFLOW)
  ------------------
  |  Branch (1324:14): [True: 0, False: 21.4k]
  ------------------
 1325|       |        /* We found this file to be existing.  Now tell the rest
 1326|       |           of the function to copy this name into the result.  */
 1327|  3.75k|        flags |= GLOB_NOCHECK;
 1328|       |
 1329|  25.1k|      if (__glibc_unlikely (!alloca_fullname))
  ------------------
  |  |  520|  25.1k|# define __glibc_unlikely(cond)	__builtin_expect ((cond), 0)
  |  |  ------------------
  |  |  |  Branch (520:33): [True: 25.1k, False: 0]
  |  |  ------------------
  ------------------
 1330|  25.1k|        free (fullname);
 1331|  25.1k|    }
 1332|    197|  else
 1333|    197|    {
 1334|    197|      stream = (__builtin_expect (flags & GLOB_ALTDIRFUNC, 0)
  ------------------
  |  Branch (1334:17): [True: 0, False: 197]
  ------------------
 1335|    197|                ? (*pglob->gl_opendir) (directory)
 1336|    197|                : opendir (directory));
 1337|    197|      if (stream == NULL)
  ------------------
  |  Branch (1337:11): [True: 197, False: 0]
  ------------------
 1338|    197|        {
 1339|    197|          if (errno != ENOTDIR
  ------------------
  |  Branch (1339:15): [True: 197, False: 0]
  ------------------
 1340|    197|              && ((errfunc != NULL && (*errfunc) (directory, errno))
  ------------------
  |  Branch (1340:20): [True: 0, False: 197]
  |  Branch (1340:39): [True: 0, False: 0]
  ------------------
 1341|    197|                  || (flags & GLOB_ERR)))
  ------------------
  |  Branch (1341:22): [True: 0, False: 197]
  ------------------
 1342|      0|            return GLOB_ABORTED;
 1343|    197|        }
 1344|      0|      else
 1345|      0|        {
 1346|      0|          DIR *dirp = stream;
 1347|      0|          int dfd = dirfd (dirp);
 1348|      0|          int fnm_flags = ((!(flags & GLOB_PERIOD) ? FNM_PERIOD : 0)
  ------------------
  |  Branch (1348:29): [True: 0, False: 0]
  ------------------
 1349|      0|                           | ((flags & GLOB_NOESCAPE) ? FNM_NOESCAPE : 0));
  ------------------
  |  Branch (1349:31): [True: 0, False: 0]
  ------------------
 1350|      0|          flags |= GLOB_MAGCHAR;
 1351|       |
 1352|      0|          while (1)
  ------------------
  |  Branch (1352:18): [Folded - Ignored]
  ------------------
 1353|      0|            {
 1354|      0|              struct readdir_result d;
 1355|      0|              {
 1356|      0|                if (__builtin_expect (flags & GLOB_ALTDIRFUNC, 0))
  ------------------
  |  Branch (1356:21): [True: 0, False: 0]
  ------------------
 1357|      0|                  d = convert_dirent (GL_READDIR (pglob, stream));
  ------------------
  |  |  151|      0|# define GL_READDIR(pglob, stream) ((pglob)->gl_readdir (stream))
  ------------------
 1358|      0|                else
 1359|      0|                  {
 1360|      0|#ifdef COMPILE_GLOB64
 1361|      0|                    d = convert_dirent (__readdir (stream));
  ------------------
  |  |   86|      0|# define __readdir              readdir
  ------------------
 1362|       |#else
 1363|       |                    d = convert_dirent64 (__readdir64 (stream));
 1364|       |#endif
 1365|      0|                  }
 1366|      0|              }
 1367|      0|              if (d.name == NULL)
  ------------------
  |  Branch (1367:19): [True: 0, False: 0]
  ------------------
 1368|      0|                break;
 1369|       |
 1370|       |              /* If we shall match only directories use the information
 1371|       |                 provided by the dirent call if possible.  */
 1372|      0|              if (flags & GLOB_ONLYDIR)
  ------------------
  |  Branch (1372:19): [True: 0, False: 0]
  ------------------
 1373|      0|                switch (readdir_result_type (d))
 1374|      0|                  {
 1375|      0|                  default: continue;
  ------------------
  |  Branch (1375:19): [True: 0, False: 0]
  ------------------
 1376|      0|                  case DT_DIR: break;
  ------------------
  |  Branch (1376:19): [True: 0, False: 0]
  ------------------
 1377|      0|                  case DT_LNK: case DT_UNKNOWN:
  ------------------
  |  Branch (1377:19): [True: 0, False: 0]
  |  Branch (1377:32): [True: 0, False: 0]
  ------------------
 1378|       |                    /* The filesystem was too lazy to give us a hint,
 1379|       |                       so we have to do it the hard way.  */
 1380|      0|                    if (__glibc_unlikely (dfd < 0 || flags & GLOB_ALTDIRFUNC))
  ------------------
  |  |  520|      0|# define __glibc_unlikely(cond)	__builtin_expect ((cond), 0)
  |  |  ------------------
  |  |  |  Branch (520:33): [True: 0, False: 0]
  |  |  |  Branch (520:52): [True: 0, False: 0]
  |  |  |  Branch (520:52): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1381|      0|                      {
 1382|      0|                        size_t namelen = strlen (d.name);
 1383|      0|                        size_t need = dirlen + 1 + namelen + 1;
 1384|      0|                        if (s.length < need
  ------------------
  |  Branch (1384:29): [True: 0, False: 0]
  ------------------
 1385|      0|                            && !scratch_buffer_set_array_size (&s, need, 1))
  ------------------
  |  Branch (1385:32): [True: 0, False: 0]
  ------------------
 1386|      0|                          goto memory_error;
 1387|      0|                        char *p = mempcpy (s.data, directory, dirlen);
 1388|      0|                        *p = '/';
 1389|      0|                        p += p[-1] != '/';
 1390|      0|                        memcpy (p, d.name, namelen + 1);
 1391|      0|                        if (! is_dir (s.data, flags, pglob))
  ------------------
  |  Branch (1391:29): [True: 0, False: 0]
  ------------------
 1392|      0|                          continue;
 1393|      0|                      }
 1394|      0|                    else
 1395|      0|                      {
 1396|      0|                        struct_stat64 st64;
  ------------------
  |  |   89|      0|# define struct_stat64          struct stat
  ------------------
 1397|      0|                        if (! (GLOB_FSTATAT64 (dfd, d.name, &st64, 0) == 0
  ------------------
  |  |   91|      0|# define GLOB_FSTATAT64         fstatat
  ------------------
  |  Branch (1397:32): [True: 0, False: 0]
  ------------------
 1398|      0|                               && S_ISDIR (st64.st_mode)))
 1399|      0|                          continue;
 1400|      0|                      }
 1401|      0|                  }
 1402|       |
 1403|      0|              if (fnmatch (pattern, d.name, fnm_flags) == 0)
  ------------------
  |  Branch (1403:19): [True: 0, False: 0]
  ------------------
 1404|      0|                {
 1405|      0|                  if (cur == names->count)
  ------------------
  |  Branch (1405:23): [True: 0, False: 0]
  ------------------
 1406|      0|                    {
 1407|      0|                      struct globnames *newnames;
 1408|      0|                      size_t count = names->count * 2;
 1409|      0|                      size_t nameoff = offsetof (struct globnames, name);
 1410|      0|                      size_t size = FLEXSIZEOF (struct globnames, name,
  ------------------
  |  |   64|      0|   ((offsetof (type, member) + FLEXALIGNOF (type) - 1 + (n)) \
  |  |  ------------------
  |  |  |  |   38|      0|# define FLEXALIGNOF(type) _Alignof (type)
  |  |  ------------------
  |  |   65|      0|    & ~ (FLEXALIGNOF (type) - 1))
  |  |  ------------------
  |  |  |  |   38|      0|# define FLEXALIGNOF(type) _Alignof (type)
  |  |  ------------------
  ------------------
 1411|      0|                                                count * sizeof (char *));
 1412|      0|                      if ((SIZE_MAX - nameoff) / 2 / sizeof (char *)
  ------------------
  |  Branch (1412:27): [True: 0, False: 0]
  ------------------
 1413|      0|                          < names->count)
 1414|      0|                        goto memory_error;
 1415|      0|                      if (glob_use_alloca (alloca_used, size))
  ------------------
  |  Branch (1415:27): [True: 0, False: 0]
  ------------------
 1416|      0|                        newnames = names_alloca
 1417|      0|                          = alloca_account (size, alloca_used);
  ------------------
  |  |  201|      0|# define alloca_account(len, avar) ((void) (len), (void) (avar), (void *) 0)
  ------------------
 1418|      0|                      else if ((newnames = malloc (size))
  ------------------
  |  Branch (1418:32): [True: 0, False: 0]
  ------------------
 1419|      0|                               == NULL)
 1420|      0|                        goto memory_error;
 1421|      0|                      newnames->count = count;
 1422|      0|                      newnames->next = names;
 1423|      0|                      names = newnames;
 1424|      0|                      cur = 0;
 1425|      0|                    }
 1426|      0|                  names->name[cur] = strdup (d.name);
 1427|      0|                  if (names->name[cur] == NULL)
  ------------------
  |  Branch (1427:23): [True: 0, False: 0]
  ------------------
 1428|      0|                    goto memory_error;
 1429|      0|                  ++cur;
 1430|      0|                  ++nfound;
 1431|      0|                  if (SIZE_MAX - pglob->gl_offs <= nfound)
  ------------------
  |  Branch (1431:23): [True: 0, False: 0]
  ------------------
 1432|      0|                    goto memory_error;
 1433|      0|                }
 1434|      0|            }
 1435|      0|        }
 1436|    197|    }
 1437|       |
 1438|  25.3k|  if (nfound == 0 && (flags & GLOB_NOCHECK))
  ------------------
  |  Branch (1438:7): [True: 25.3k, False: 0]
  |  Branch (1438:22): [True: 3.75k, False: 21.6k]
  ------------------
 1439|  3.75k|    {
 1440|  3.75k|      size_t len = strlen (pattern);
 1441|  3.75k|      nfound = 1;
 1442|  3.75k|      names->name[cur] = malloc (len + 1);
 1443|  3.75k|      if (names->name[cur] == NULL)
  ------------------
  |  Branch (1443:11): [True: 0, False: 3.75k]
  ------------------
 1444|      0|        goto memory_error;
 1445|  3.75k|      *((char *) mempcpy (names->name[cur++], pattern, len)) = '\0';
 1446|  3.75k|    }
 1447|       |
 1448|  25.3k|  result = GLOB_NOMATCH;
 1449|  25.3k|  if (nfound != 0)
  ------------------
  |  Branch (1449:7): [True: 3.75k, False: 21.6k]
  ------------------
 1450|  3.75k|    {
 1451|  3.75k|      char **new_gl_pathv;
 1452|  3.75k|      result = 0;
 1453|       |
 1454|  3.75k|      if (SIZE_MAX / sizeof (char *) - pglob->gl_pathc
  ------------------
  |  Branch (1454:11): [True: 0, False: 3.75k]
  ------------------
 1455|  3.75k|          < pglob->gl_offs + nfound + 1)
 1456|      0|        goto memory_error;
 1457|       |
 1458|  3.75k|      new_gl_pathv
 1459|  3.75k|        = realloc (pglob->gl_pathv,
 1460|  3.75k|                   (pglob->gl_pathc + pglob->gl_offs + nfound + 1)
 1461|  3.75k|                    * sizeof (char *));
 1462|       |
 1463|  3.75k|      if (new_gl_pathv == NULL)
  ------------------
  |  Branch (1463:11): [True: 0, False: 3.75k]
  ------------------
 1464|      0|        {
 1465|      0|        memory_error:
 1466|      0|          while (1)
  ------------------
  |  Branch (1466:18): [Folded - Ignored]
  ------------------
 1467|      0|            {
 1468|      0|              struct globnames *old = names;
 1469|      0|              for (size_t i = 0; i < cur; ++i)
  ------------------
  |  Branch (1469:34): [True: 0, False: 0]
  ------------------
 1470|      0|                free (names->name[i]);
 1471|      0|              names = names->next;
 1472|       |              /* NB: we will not leak memory here if we exit without
 1473|       |                 freeing the current block assigned to OLD.  At least
 1474|       |                 the very first block is always allocated on the stack
 1475|       |                 and this is the block assigned to OLD here.  */
 1476|      0|              if (names == NULL)
  ------------------
  |  Branch (1476:19): [True: 0, False: 0]
  ------------------
 1477|      0|                {
 1478|      0|                  assert (old == init_names);
 1479|      0|                  break;
 1480|      0|                }
 1481|      0|              cur = names->count;
 1482|      0|              if (old == names_alloca)
  ------------------
  |  Branch (1482:19): [True: 0, False: 0]
  ------------------
 1483|      0|                names_alloca = names;
 1484|      0|              else
 1485|      0|                free (old);
 1486|      0|            }
 1487|      0|          result = GLOB_NOSPACE;
 1488|      0|        }
 1489|  3.75k|      else
 1490|  3.75k|        {
 1491|  3.75k|          while (1)
  ------------------
  |  Branch (1491:18): [Folded - Ignored]
  ------------------
 1492|  3.75k|            {
 1493|  3.75k|              struct globnames *old = names;
 1494|  7.51k|              for (size_t i = 0; i < cur; ++i)
  ------------------
  |  Branch (1494:34): [True: 3.75k, False: 3.75k]
  ------------------
 1495|  3.75k|                new_gl_pathv[pglob->gl_offs + pglob->gl_pathc++]
 1496|  3.75k|                  = names->name[i];
 1497|  3.75k|              names = names->next;
 1498|       |              /* NB: we will not leak memory here if we exit without
 1499|       |                 freeing the current block assigned to OLD.  At least
 1500|       |                 the very first block is always allocated on the stack
 1501|       |                 and this is the block assigned to OLD here.  */
 1502|  3.75k|              if (names == NULL)
  ------------------
  |  Branch (1502:19): [True: 3.75k, False: 0]
  ------------------
 1503|  3.75k|                {
 1504|  3.75k|                  assert (old == init_names);
 1505|  3.75k|                  break;
 1506|  3.75k|                }
 1507|      0|              cur = names->count;
 1508|      0|              if (old == names_alloca)
  ------------------
  |  Branch (1508:19): [True: 0, False: 0]
  ------------------
 1509|      0|                names_alloca = names;
 1510|      0|              else
 1511|      0|                free (old);
 1512|      0|            }
 1513|       |
 1514|  3.75k|          pglob->gl_pathv = new_gl_pathv;
 1515|       |
 1516|  3.75k|          pglob->gl_pathv[pglob->gl_offs + pglob->gl_pathc] = NULL;
 1517|       |
 1518|  3.75k|          pglob->gl_flags = flags;
 1519|  3.75k|        }
 1520|  3.75k|    }
 1521|       |
 1522|  25.3k|  if (stream != NULL)
  ------------------
  |  Branch (1522:7): [True: 0, False: 25.3k]
  ------------------
 1523|      0|    {
 1524|      0|      save = errno;
 1525|      0|      if (__glibc_unlikely (flags & GLOB_ALTDIRFUNC))
  ------------------
  |  |  520|      0|# define __glibc_unlikely(cond)	__builtin_expect ((cond), 0)
  |  |  ------------------
  |  |  |  Branch (520:33): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1526|      0|        (*pglob->gl_closedir) (stream);
 1527|      0|      else
 1528|      0|        closedir (stream);
 1529|      0|      __set_errno (save);
  ------------------
  |  |   46|      0|# define __set_errno(val) (errno = (val))
  ------------------
 1530|      0|    }
 1531|       |
 1532|  25.3k|  scratch_buffer_free (&s);
 1533|  25.3k|  return result;
 1534|  25.3k|}
glob.c:glob_lstat:
  208|  25.1k|{
  209|       |/* Use on glob-lstat-compat.c to provide a compat symbol which does not
  210|       |   use lstat / gl_lstat.  */
  211|  25.1k|  union
  212|  25.1k|  {
  213|  25.1k|    struct_stat st;
  214|  25.1k|    struct_stat64 st64;
  215|  25.1k|  } ust;
  216|  25.1k|  return (__glibc_unlikely (flags & GLOB_ALTDIRFUNC)
  ------------------
  |  |  520|  25.1k|# define __glibc_unlikely(cond)	__builtin_expect ((cond), 0)
  |  |  ------------------
  |  |  |  Branch (520:33): [True: 0, False: 25.1k]
  |  |  ------------------
  ------------------
  217|  25.1k|          ? pglob->GLOB_LSTAT (fullname, &ust.st)
  ------------------
  |  |   90|      0|# define GLOB_LSTAT             gl_lstat
  ------------------
  218|  25.1k|          : GLOB_FSTATAT64 (AT_FDCWD, fullname, &ust.st64,
  ------------------
  |  |   91|  25.1k|# define GLOB_FSTATAT64         fstatat
  ------------------
  219|  25.1k|                            AT_SYMLINK_NOFOLLOW));
  220|  25.1k|}

glob.c:__glob_pattern_type:
   32|  52.5k|{
   33|  52.5k|  const char *p;
   34|  52.5k|  int ret = GLOBPAT_NONE;
   35|       |
   36|   792k|  for (p = pattern; *p != '\0'; ++p)
  ------------------
  |  Branch (36:21): [True: 741k, False: 50.8k]
  ------------------
   37|   741k|    switch (*p)
  ------------------
  |  Branch (37:13): [True: 735k, False: 5.67k]
  ------------------
   38|   741k|      {
   39|    741|      case '?':
  ------------------
  |  Branch (39:7): [True: 741, False: 740k]
  ------------------
   40|  1.42k|      case '*':
  ------------------
  |  Branch (40:7): [True: 683, False: 740k]
  ------------------
   41|  1.42k|        return GLOBPAT_SPECIAL;
   42|       |
   43|  2.53k|      case '\\':
  ------------------
  |  Branch (43:7): [True: 2.53k, False: 738k]
  ------------------
   44|  2.53k|        if (quote)
  ------------------
  |  Branch (44:13): [True: 2.53k, False: 0]
  ------------------
   45|  2.53k|          {
   46|  2.53k|            if (p[1] != '\0')
  ------------------
  |  Branch (46:17): [True: 2.02k, False: 507]
  ------------------
   47|  2.02k|              ++p;
   48|  2.53k|            ret |= GLOBPAT_BACKSLASH;
   49|  2.53k|          }
   50|  2.53k|        break;
   51|       |
   52|    990|      case '[':
  ------------------
  |  Branch (52:7): [True: 990, False: 740k]
  ------------------
   53|    990|        ret |= GLOBPAT_BRACKET;
   54|    990|        break;
   55|       |
   56|    724|      case ']':
  ------------------
  |  Branch (56:7): [True: 724, False: 740k]
  ------------------
   57|    724|        if (ret & 4)
  ------------------
  |  Branch (57:13): [True: 334, False: 390]
  ------------------
   58|    334|          return GLOBPAT_SPECIAL;
   59|    390|        break;
   60|   741k|      }
   61|       |
   62|  50.8k|  return ret;
   63|  52.5k|}

rpl_globfree:
   29|  16.9k|{
   30|  16.9k|  if (pglob->gl_pathv != NULL)
  ------------------
  |  Branch (30:7): [True: 16.9k, False: 7]
  ------------------
   31|  16.9k|    {
   32|  16.9k|      size_t i;
   33|  33.9k|      for (i = 0; i < pglob->gl_pathc; ++i)
  ------------------
  |  Branch (33:19): [True: 16.9k, False: 16.9k]
  ------------------
   34|  16.9k|        free (pglob->gl_pathv[pglob->gl_offs + i]);
   35|  16.9k|      free (pglob->gl_pathv);
   36|  16.9k|      pglob->gl_pathv = NULL;
   37|  16.9k|    }
   38|  16.9k|}

imalloc:
   59|  7.79k|{
   60|  7.79k|  return s <= SIZE_MAX ? malloc (s) : _gl_alloc_nomem ();
  ------------------
  |  Branch (60:10): [True: 7.79k, False: 0]
  ------------------
   61|  7.79k|}

glob.c:scratch_buffer_init:
   77|  28.0k|{
   78|  28.0k|  buffer->data = buffer->__space.__c;
   79|  28.0k|  buffer->length = sizeof (buffer->__space);
   80|  28.0k|}
glob.c:scratch_buffer_free:
   85|  28.0k|{
   86|  28.0k|  if (buffer->data != buffer->__space.__c)
  ------------------
  |  Branch (86:7): [True: 0, False: 28.0k]
  ------------------
   87|      0|    free (buffer->data);
   88|  28.0k|}

gl_sockets_startup:
  117|  9.50k|{
  118|       |#if WINDOWS_SOCKETS
  119|       |  if (version > initialized_sockets_version)
  120|       |    {
  121|       |      WSADATA data;
  122|       |      int err;
  123|       |
  124|       |      err = WSAStartup (version, &data);
  125|       |      if (err != 0)
  126|       |        return 1;
  127|       |
  128|       |      if (data.wVersion != version)
  129|       |        {
  130|       |          WSACleanup ();
  131|       |          return 2;
  132|       |        }
  133|       |
  134|       |      if (initialized_sockets_version == 0)
  135|       |        register_fd_hook (close_fd_maybe_socket, ioctl_fd_maybe_socket,
  136|       |                          &fd_sockets_hook);
  137|       |
  138|       |      initialized_sockets_version = version;
  139|       |    }
  140|       |#endif
  141|       |
  142|  9.50k|  return 0;
  143|  9.50k|}

xgethostname:
   33|  7.79k|{
   34|  7.79k|  char buf[100];
   35|  7.79k|  idx_t size = sizeof buf;
   36|  7.79k|  char *name = buf;
   37|  7.79k|  char *alloc = NULL;
   38|       |
   39|  7.79k|  while (1)
  ------------------
  |  Branch (39:10): [Folded - Ignored]
  ------------------
   40|  7.79k|    {
   41|       |      /* Use SIZE_1 here rather than SIZE to work around the bug in
   42|       |         SunOS 5.5's gethostname whereby it NUL-terminates HOSTNAME
   43|       |         even when the name is as long as the supplied buffer.  */
   44|  7.79k|      idx_t size_1 = size - 1;
   45|  7.79k|      name[size_1] = '\0';
   46|  7.79k|      errno = 0;
   47|  7.79k|      if (GETANAME (name, size_1) == 0)
  ------------------
  |  |   26|  7.79k|#define GETANAME gethostname
  ------------------
  |  Branch (47:11): [True: 7.79k, False: 0]
  ------------------
   48|  7.79k|        {
   49|       |          /* Check whether the name was possibly truncated; POSIX does not
   50|       |             specify whether a truncated name is null-terminated.  */
   51|  7.79k|          idx_t actual_size = strlen (name) + 1;
   52|  7.79k|          if (actual_size < size_1)
  ------------------
  |  Branch (52:15): [True: 7.79k, False: 0]
  ------------------
   53|  7.79k|            return alloc ? alloc : ximemdup (name, actual_size);
  ------------------
  |  Branch (53:20): [True: 0, False: 7.79k]
  ------------------
   54|      0|          errno = 0;
   55|      0|        }
   56|      0|      free (alloc);
   57|      0|      if (errno != 0 && errno != ENAMETOOLONG && errno != EINVAL
  ------------------
  |  Branch (57:11): [True: 0, False: 0]
  |  Branch (57:25): [True: 0, False: 0]
  |  Branch (57:50): [True: 0, False: 0]
  ------------------
   58|       |          /* macOS/Darwin does this when SIZE_1 is too small.  */
   59|      0|          && errno != ENOMEM)
  ------------------
  |  Branch (59:14): [True: 0, False: 0]
  ------------------
   60|      0|        return NULL;
   61|      0|      name = alloc = xpalloc (NULL, &size, 1, -1, 1);
   62|      0|    }
   63|  7.79k|}

ximalloc:
   50|  7.79k|{
   51|  7.79k|  return check_nonnull (imalloc (s));
   52|  7.79k|}
ximemdup:
  319|  7.79k|{
  320|  7.79k|  return memcpy (ximalloc (s), p, s);
  321|  7.79k|}
xmalloc.c:check_nonnull:
   34|  7.79k|{
   35|  7.79k|  if (!p)
  ------------------
  |  Branch (35:7): [True: 0, False: 7.79k]
  ------------------
   36|      0|    xalloc_die ();
   37|  7.79k|  return p;
   38|  7.79k|}

buffer.c:wget_malloc:
  455|  64.2k|{
  456|  64.2k|	return wget_malloc_fn(size);
  457|  64.2k|}
buffer.c:wget_realloc:
  467|    201|{
  468|    201|	return wget_realloc_fn(ptr, size);
  469|    201|}
dns_cache.c:wget_calloc:
  461|  1.59k|{
  462|  1.59k|	return wget_calloc_fn(nmemb, size);
  463|  1.59k|}
encoding.c:wget_malloc:
  455|  24.5k|{
  456|  24.5k|	return wget_malloc_fn(size);
  457|  24.5k|}
encoding.c:wget_realloc:
  467|  5.62k|{
  468|  5.62k|	return wget_realloc_fn(ptr, size);
  469|  5.62k|}
hashmap.c:wget_calloc:
  461|  11.1k|{
  462|  11.1k|	return wget_calloc_fn(nmemb, size);
  463|  11.1k|}
hashmap.c:wget_malloc:
  455|  11.1k|{
  456|  11.1k|	return wget_malloc_fn(size);
  457|  11.1k|}
io.c:wget_malloc:
  455|  21.9k|{
  456|  21.9k|	return wget_malloc_fn(size);
  457|  21.9k|}
http_parse.c:wget_stringmap_free:
  935|  4.78k|{
  936|  4.78k|	wget_hashmap_free(h);
  937|  4.78k|}
iri.c:wget_malloc:
  455|  13.1k|{
  456|  13.1k|	return wget_malloc_fn(size);
  457|  13.1k|}
mem.c:wget_malloc:
  455|  92.3k|{
  456|  92.3k|	return wget_malloc_fn(size);
  457|  92.3k|}
printf.c:wget_realloc:
  467|  64.2k|{
  468|  64.2k|	return wget_realloc_fn(ptr, size);
  469|  64.2k|}
thread.c:wget_malloc:
  455|  11.1k|{
  456|  11.1k|	return wget_malloc_fn(size);
  457|  11.1k|}
vector.c:wget_calloc:
  461|  29.6k|{
  462|  29.6k|	return wget_calloc_fn(nmemb, size);
  463|  29.6k|}
vector.c:wget_malloc:
  455|  29.6k|{
  456|  29.6k|	return wget_malloc_fn(size);
  457|  29.6k|}
vector.c:wget_realloc:
  467|  2.07k|{
  468|  2.07k|	return wget_realloc_fn(ptr, size);
  469|  2.07k|}
dns.c:wget_calloc:
  461|  9.50k|{
  462|  9.50k|	return wget_calloc_fn(nmemb, size);
  463|  9.50k|}

c_isalpha:
  184|  13.1k|{
  185|  13.1k|  switch (c)
  186|  13.1k|    {
  187|  52.9k|    _C_CTYPE_LOWER:
  ------------------
  |  |  138|      0|#define _C_CTYPE_LOWER _C_CTYPE_LOWER_N (0)
  |  |  ------------------
  |  |  |  |  122|  1.23k|   _C_CTYPE_LOWER_A_THRU_F_N(N): \
  |  |  |  |  ------------------
  |  |  |  |  |  |  119|    608|   case 'a' + (N): case 'b' + (N): case 'c' + (N): case 'd' + (N): \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (119:4): [True: 19, False: 13.0k]
  |  |  |  |  |  |  |  Branch (119:20): [True: 65, False: 13.0k]
  |  |  |  |  |  |  |  Branch (119:36): [True: 428, False: 12.6k]
  |  |  |  |  |  |  |  Branch (119:52): [True: 96, False: 13.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  120|  1.23k|   case 'e' + (N): case 'f' + (N)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (120:4): [True: 493, False: 12.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (122:4): [True: 135, False: 12.9k]
  |  |  |  |  ------------------
  |  |  |  |  123|  1.90k|   case 'g' + (N): case 'h' + (N): case 'i' + (N): case 'j' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (123:4): [True: 6, False: 13.1k]
  |  |  |  |  |  Branch (123:20): [True: 641, False: 12.4k]
  |  |  |  |  |  Branch (123:36): [True: 18, False: 13.0k]
  |  |  |  |  |  Branch (123:52): [True: 5, False: 13.1k]
  |  |  |  |  ------------------
  |  |  |  |  124|  2.11k|   case 'k' + (N): case 'l' + (N): case 'm' + (N): case 'n' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:4): [True: 62, False: 13.0k]
  |  |  |  |  |  Branch (124:20): [True: 48, False: 13.0k]
  |  |  |  |  |  Branch (124:36): [True: 76, False: 13.0k]
  |  |  |  |  |  Branch (124:52): [True: 26, False: 13.0k]
  |  |  |  |  ------------------
  |  |  |  |  125|  2.72k|   case 'o' + (N): case 'p' + (N): case 'q' + (N): case 'r' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (125:4): [True: 14, False: 13.1k]
  |  |  |  |  |  Branch (125:20): [True: 323, False: 12.7k]
  |  |  |  |  |  Branch (125:36): [True: 6, False: 13.1k]
  |  |  |  |  |  Branch (125:52): [True: 268, False: 12.8k]
  |  |  |  |  ------------------
  |  |  |  |  126|  2.88k|   case 's' + (N): case 't' + (N): case 'u' + (N): case 'v' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (126:4): [True: 87, False: 13.0k]
  |  |  |  |  |  Branch (126:20): [True: 40, False: 13.0k]
  |  |  |  |  |  Branch (126:36): [True: 4, False: 13.1k]
  |  |  |  |  |  Branch (126:52): [True: 26, False: 13.0k]
  |  |  |  |  ------------------
  |  |  |  |  127|  3.57k|   case 'w' + (N): case 'x' + (N): case 'y' + (N): case 'z' + (N)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (127:4): [True: 6, False: 13.1k]
  |  |  |  |  |  Branch (127:20): [True: 421, False: 12.6k]
  |  |  |  |  |  Branch (127:36): [True: 15, False: 13.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  188|  52.9k|    _C_CTYPE_UPPER:
  ------------------
  |  |  148|  3.57k|#define _C_CTYPE_UPPER _C_CTYPE_LOWER_N ('A' - 'a')
  |  |  ------------------
  |  |  |  |  122|  3.73k|   _C_CTYPE_LOWER_A_THRU_F_N(N): \
  |  |  |  |  ------------------
  |  |  |  |  |  |  119|  3.62k|   case 'a' + (N): case 'b' + (N): case 'c' + (N): case 'd' + (N): \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (119:4): [True: 13, False: 13.1k]
  |  |  |  |  |  |  |  Branch (119:20): [True: 11, False: 13.1k]
  |  |  |  |  |  |  |  Branch (119:36): [True: 8, False: 13.1k]
  |  |  |  |  |  |  |  Branch (119:52): [True: 11, False: 13.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  120|  3.73k|   case 'e' + (N): case 'f' + (N)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (120:4): [True: 8, False: 13.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (122:4): [True: 103, False: 13.0k]
  |  |  |  |  ------------------
  |  |  |  |  123|  3.77k|   case 'g' + (N): case 'h' + (N): case 'i' + (N): case 'j' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (123:4): [True: 13, False: 13.1k]
  |  |  |  |  |  Branch (123:20): [True: 9, False: 13.1k]
  |  |  |  |  |  Branch (123:36): [True: 7, False: 13.1k]
  |  |  |  |  |  Branch (123:52): [True: 18, False: 13.0k]
  |  |  |  |  ------------------
  |  |  |  |  124|  3.99k|   case 'k' + (N): case 'l' + (N): case 'm' + (N): case 'n' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:4): [True: 2, False: 13.1k]
  |  |  |  |  |  Branch (124:20): [True: 160, False: 12.9k]
  |  |  |  |  |  Branch (124:36): [True: 51, False: 13.0k]
  |  |  |  |  |  Branch (124:52): [True: 4, False: 13.1k]
  |  |  |  |  ------------------
  |  |  |  |  125|  4.01k|   case 'o' + (N): case 'p' + (N): case 'q' + (N): case 'r' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (125:4): [True: 10, False: 13.1k]
  |  |  |  |  |  Branch (125:20): [True: 6, False: 13.1k]
  |  |  |  |  |  Branch (125:36): [True: 3, False: 13.1k]
  |  |  |  |  |  Branch (125:52): [True: 1, False: 13.1k]
  |  |  |  |  ------------------
  |  |  |  |  126|  4.54k|   case 's' + (N): case 't' + (N): case 'u' + (N): case 'v' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (126:4): [True: 6, False: 13.1k]
  |  |  |  |  |  Branch (126:20): [True: 54, False: 13.0k]
  |  |  |  |  |  Branch (126:36): [True: 440, False: 12.6k]
  |  |  |  |  |  Branch (126:52): [True: 29, False: 13.0k]
  |  |  |  |  ------------------
  |  |  |  |  127|  4.91k|   case 'w' + (N): case 'x' + (N): case 'y' + (N): case 'z' + (N)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (127:4): [True: 1, False: 13.1k]
  |  |  |  |  |  Branch (127:20): [True: 367, False: 12.7k]
  |  |  |  |  |  Branch (127:36): [True: 2, False: 13.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|  4.91k|      return true;
  190|  8.20k|    default:
  ------------------
  |  Branch (190:5): [True: 8.20k, False: 4.91k]
  ------------------
  191|  8.20k|      return false;
  192|  13.1k|    }
  193|  13.1k|}
c_isupper:
  313|  60.9k|{
  314|  60.9k|  switch (c)
  315|  60.9k|    {
  316|  7.41k|    _C_CTYPE_UPPER:
  ------------------
  |  |  148|      0|#define _C_CTYPE_UPPER _C_CTYPE_LOWER_N ('A' - 'a')
  |  |  ------------------
  |  |  |  |  122|  3.41k|   _C_CTYPE_LOWER_A_THRU_F_N(N): \
  |  |  |  |  ------------------
  |  |  |  |  |  |  119|  3.12k|   case 'a' + (N): case 'b' + (N): case 'c' + (N): case 'd' + (N): \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (119:4): [True: 1.90k, False: 59.0k]
  |  |  |  |  |  |  |  Branch (119:20): [True: 736, False: 60.2k]
  |  |  |  |  |  |  |  Branch (119:36): [True: 375, False: 60.5k]
  |  |  |  |  |  |  |  Branch (119:52): [True: 113, False: 60.8k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  120|  3.41k|   case 'e' + (N): case 'f' + (N)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (120:4): [True: 79, False: 60.8k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (122:4): [True: 211, False: 60.7k]
  |  |  |  |  ------------------
  |  |  |  |  123|  4.66k|   case 'g' + (N): case 'h' + (N): case 'i' + (N): case 'j' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (123:4): [True: 837, False: 60.1k]
  |  |  |  |  |  Branch (123:20): [True: 198, False: 60.7k]
  |  |  |  |  |  Branch (123:36): [True: 148, False: 60.8k]
  |  |  |  |  |  Branch (123:52): [True: 65, False: 60.8k]
  |  |  |  |  ------------------
  |  |  |  |  124|  5.57k|   case 'k' + (N): case 'l' + (N): case 'm' + (N): case 'n' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:4): [True: 121, False: 60.8k]
  |  |  |  |  |  Branch (124:20): [True: 412, False: 60.5k]
  |  |  |  |  |  Branch (124:36): [True: 131, False: 60.8k]
  |  |  |  |  |  Branch (124:52): [True: 244, False: 60.7k]
  |  |  |  |  ------------------
  |  |  |  |  125|  5.76k|   case 'o' + (N): case 'p' + (N): case 'q' + (N): case 'r' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (125:4): [True: 70, False: 60.8k]
  |  |  |  |  |  Branch (125:20): [True: 68, False: 60.8k]
  |  |  |  |  |  Branch (125:36): [True: 20, False: 60.9k]
  |  |  |  |  |  Branch (125:52): [True: 40, False: 60.9k]
  |  |  |  |  ------------------
  |  |  |  |  126|  6.57k|   case 's' + (N): case 't' + (N): case 'u' + (N): case 'v' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (126:4): [True: 57, False: 60.9k]
  |  |  |  |  |  Branch (126:20): [True: 157, False: 60.8k]
  |  |  |  |  |  Branch (126:36): [True: 519, False: 60.4k]
  |  |  |  |  |  Branch (126:52): [True: 76, False: 60.8k]
  |  |  |  |  ------------------
  |  |  |  |  127|  7.41k|   case 'w' + (N): case 'x' + (N): case 'y' + (N): case 'z' + (N)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (127:4): [True: 33, False: 60.9k]
  |  |  |  |  |  Branch (127:20): [True: 560, False: 60.3k]
  |  |  |  |  |  Branch (127:36): [True: 178, False: 60.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  317|  7.41k|      return true;
  318|  53.5k|    default:
  ------------------
  |  Branch (318:5): [True: 53.5k, False: 7.41k]
  ------------------
  319|  53.5k|      return false;
  320|  60.9k|    }
  321|  60.9k|}
c_isxdigit:
  325|  7.78k|{
  326|  7.78k|  switch (c)
  327|  7.78k|    {
  328|  12.5k|    _C_CTYPE_DIGIT:
  ------------------
  |  |  135|  1.04k|   case '0': case '1': case '2': case '3': \
  |  |  ------------------
  |  |  |  Branch (135:4): [True: 260, False: 7.52k]
  |  |  |  Branch (135:14): [True: 141, False: 7.64k]
  |  |  |  Branch (135:24): [True: 525, False: 7.25k]
  |  |  |  Branch (135:34): [True: 116, False: 7.66k]
  |  |  ------------------
  |  |  136|  1.75k|   case '4': case '5': case '6': case '7': \
  |  |  ------------------
  |  |  |  Branch (136:4): [True: 193, False: 7.59k]
  |  |  |  Branch (136:14): [True: 206, False: 7.57k]
  |  |  |  Branch (136:24): [True: 148, False: 7.63k]
  |  |  |  Branch (136:34): [True: 165, False: 7.61k]
  |  |  ------------------
  |  |  137|  1.99k|   case '8': case '9'
  |  |  ------------------
  |  |  |  Branch (137:4): [True: 178, False: 7.60k]
  |  |  ------------------
  ------------------
  329|  12.5k|    _C_CTYPE_A_THRU_F:
  ------------------
  |  |  132|  4.02k|   _C_CTYPE_LOWER_A_THRU_F_N (0): \
  |  |  ------------------
  |  |  |  |  119|  3.15k|   case 'a' + (N): case 'b' + (N): case 'c' + (N): case 'd' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (119:4): [True: 364, False: 7.42k]
  |  |  |  |  |  Branch (119:20): [True: 168, False: 7.61k]
  |  |  |  |  |  Branch (119:36): [True: 371, False: 7.41k]
  |  |  |  |  |  Branch (119:52): [True: 252, False: 7.53k]
  |  |  |  |  ------------------
  |  |  |  |  120|  4.02k|   case 'e' + (N): case 'f' + (N)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (120:4): [True: 479, False: 7.30k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (132:4): [True: 394, False: 7.39k]
  |  |  ------------------
  |  |  133|  4.11k|   _C_CTYPE_LOWER_A_THRU_F_N ('A' - 'a')
  |  |  ------------------
  |  |  |  |  119|  4.87k|   case 'a' + (N): case 'b' + (N): case 'c' + (N): case 'd' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (119:4): [True: 87, False: 7.69k]
  |  |  |  |  |  Branch (119:20): [True: 132, False: 7.65k]
  |  |  |  |  |  Branch (119:36): [True: 224, False: 7.56k]
  |  |  |  |  |  Branch (119:52): [True: 406, False: 7.37k]
  |  |  |  |  ------------------
  |  |  |  |  120|  5.84k|   case 'e' + (N): case 'f' + (N)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (120:4): [True: 745, False: 7.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  330|  5.84k|      return true;
  331|  1.94k|    default:
  ------------------
  |  Branch (331:5): [True: 1.94k, False: 5.84k]
  ------------------
  332|  1.94k|      return false;
  333|  7.78k|    }
  334|  7.78k|}

wget_buffer_init:
  154|  86.2k|{
  155|  86.2k|	if (data && likely(size)) {
  ------------------
  |  |  117|  21.9k|#	define likely(expr) __builtin_expect(!!(expr), 1)
  |  |  ------------------
  |  |  |  Branch (117:23): [True: 21.9k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (155:6): [True: 21.9k, False: 64.2k]
  ------------------
  156|  21.9k|		buf->size = size - 1;
  157|  21.9k|		buf->data = data;
  158|  21.9k|		*buf->data = 0; // always 0 terminate data to allow string functions
  159|  21.9k|		buf->release_data = 0;
  160|  64.2k|	} else {
  161|  64.2k|		if (!size)
  ------------------
  |  Branch (161:7): [True: 0, False: 64.2k]
  ------------------
  162|      0|			size = 127;
  163|  64.2k|		buf->size = size;
  164|  64.2k|		if (!(buf->data = wget_malloc(size + 1))) {
  ------------------
  |  Branch (164:7): [True: 0, False: 64.2k]
  ------------------
  165|      0|			buf->error = 1;
  166|      0|			return WGET_E_MEMORY;
  167|      0|		}
  168|  64.2k|		*buf->data = 0; // always 0 terminate data to allow string functions
  169|  64.2k|		buf->release_data = 1;
  170|  64.2k|	}
  171|       |
  172|  86.2k|	buf->error = 0;
  173|  86.2k|	buf->release_buf = 0;
  174|  86.2k|	buf->length = 0;
  175|       |
  176|  86.2k|	return WGET_E_SUCCESS;
  177|  86.2k|}
wget_buffer_deinit:
  269|  21.9k|{
  270|  21.9k|	if (buf->release_data) {
  ------------------
  |  Branch (270:6): [True: 48, False: 21.9k]
  ------------------
  271|     48|		xfree(buf->data);
  ------------------
  |  |   53|     48|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 48, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  272|     48|		buf->release_data = 0;
  273|     48|	}
  274|       |
  275|  21.9k|	if (buf->release_buf)
  ------------------
  |  Branch (275:6): [True: 0, False: 21.9k]
  ------------------
  276|      0|		wget_free(buf); // do not use xfree() since buf is NONNULL
  277|  21.9k|}
wget_buffer_memcpy:
  357|    957|{
  358|    957|	if (unlikely(!buf))
  ------------------
  |  |  116|    957|#	define unlikely(expr) __builtin_expect(!!(expr), 0)
  |  |  ------------------
  |  |  |  Branch (116:25): [True: 0, False: 957]
  |  |  ------------------
  ------------------
  359|      0|		return 0;
  360|       |
  361|    957|	buf->length = 0;
  362|       |
  363|    957|	return wget_buffer_memcat(buf, data, length);
  364|    957|}
wget_buffer_memcat:
  379|   144k|{
  380|   144k|	if (unlikely(!buf))
  ------------------
  |  |  116|   144k|#	define unlikely(expr) __builtin_expect(!!(expr), 0)
  |  |  ------------------
  |  |  |  Branch (116:25): [True: 0, False: 144k]
  |  |  ------------------
  ------------------
  381|      0|		return 0;
  382|       |
  383|   144k|	if (likely(length)) {
  ------------------
  |  |  117|   144k|#	define likely(expr) __builtin_expect(!!(expr), 1)
  |  |  ------------------
  |  |  |  Branch (117:23): [True: 126k, False: 18.5k]
  |  |  ------------------
  ------------------
  384|   126k|		if (buf->size < buf->length + length)
  ------------------
  |  Branch (384:7): [True: 249, False: 125k]
  ------------------
  385|    249|			if (buffer_realloc(buf, buf->size * 2 + length) != WGET_E_SUCCESS)
  ------------------
  |  Branch (385:8): [True: 0, False: 249]
  ------------------
  386|      0|				return buf->length;
  387|       |
  388|   126k|		if (likely(data))
  ------------------
  |  |  117|   126k|#	define likely(expr) __builtin_expect(!!(expr), 1)
  |  |  ------------------
  |  |  |  Branch (117:23): [True: 126k, False: 0]
  |  |  ------------------
  ------------------
  389|   126k|			memcpy(buf->data + buf->length, data, length);
  390|      0|		else
  391|      0|			memset(buf->data + buf->length, 0, length);
  392|   126k|		buf->length += length;
  393|   126k|	}
  394|   144k|	buf->data[buf->length] = 0; // always 0 terminate data to allow string functions
  395|       |
  396|   144k|	return buf->length;
  397|   144k|}
wget_buffer_strcat:
  437|  91.3k|{
  438|  91.3k|	return wget_buffer_memcat(buf, s, likely(s) ? strlen(s) : 0);
  ------------------
  |  |  117|  91.3k|#	define likely(expr) __builtin_expect(!!(expr), 1)
  |  |  ------------------
  |  |  |  Branch (117:23): [True: 91.3k, False: 0]
  |  |  ------------------
  ------------------
  439|  91.3k|}
buffer.c:buffer_realloc:
  207|    249|{
  208|    249|	char *old_data = buf->data;
  209|       |
  210|    249|	if (buf->release_data)
  ------------------
  |  Branch (210:6): [True: 201, False: 48]
  ------------------
  211|    201|		buf->data = wget_realloc(buf->data, size + 1);
  212|     48|	else
  213|     48|		buf->data = wget_malloc(size + 1);
  214|       |
  215|    249|	if (!buf->data) {
  ------------------
  |  Branch (215:6): [True: 0, False: 249]
  ------------------
  216|      0|		buf->data = old_data;
  217|      0|		buf->error = 1;
  218|      0|		return WGET_E_MEMORY;
  219|      0|	}
  220|       |
  221|    249|	if (!buf->release_data) {
  ------------------
  |  Branch (221:6): [True: 48, False: 201]
  ------------------
  222|     48|		if (likely(old_data) && buf->length)
  ------------------
  |  |  117|     96|#	define likely(expr) __builtin_expect(!!(expr), 1)
  |  |  ------------------
  |  |  |  Branch (117:23): [True: 48, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (222:27): [True: 22, False: 26]
  ------------------
  223|     22|			memcpy(buf->data, old_data, buf->length + 1);
  224|     26|		else
  225|     26|			*buf->data = 0; // always 0 terminate data to allow string functions
  226|       |
  227|     48|		buf->release_data = 1;
  228|     48|	}
  229|       |
  230|    249|	buf->size = size;
  231|       |
  232|    249|	return WGET_E_SUCCESS;
  233|    249|}

wget_buffer_vprintf_append:
  339|  64.2k|{
  340|  64.2k|	const char *p = fmt, *begin;
  341|  64.2k|	int field_width, precision;
  342|  64.2k|	unsigned int flags;
  343|  64.2k|	long long arg;
  344|  64.2k|	unsigned long long argu;
  345|       |
  346|  64.2k|	if (!p)
  ------------------
  |  Branch (346:6): [True: 0, False: 64.2k]
  ------------------
  347|      0|		return 0;
  348|       |
  349|   154k|	for (;*p;) {
  ------------------
  |  Branch (349:8): [True: 137k, False: 17.1k]
  ------------------
  350|       |
  351|       |		/*
  352|       |		 * Collect plain char sequence.
  353|       |		 * Walk the string until we find a '%' character.
  354|       |		 */
  355|   667k|		for (begin = p; *p && *p != '%'; p++);
  ------------------
  |  Branch (355:19): [True: 620k, False: 47.0k]
  |  Branch (355:25): [True: 530k, False: 90.4k]
  ------------------
  356|   137k|		if (p != begin)
  ------------------
  |  Branch (356:7): [True: 51.6k, False: 85.7k]
  ------------------
  357|  51.6k|			wget_buffer_memcat(buf, begin, p - begin);
  358|       |
  359|   137k|		if (!*p)
  ------------------
  |  Branch (359:7): [True: 47.0k, False: 90.4k]
  ------------------
  360|  47.0k|			break;
  361|       |
  362|       |		/* Shortcut to %s and %p, handle %% */
  363|  90.4k|		if (*++p == 's') {
  ------------------
  |  Branch (363:7): [True: 90.4k, False: 0]
  ------------------
  364|  90.4k|			const char *s = va_arg(args, const char *);
  365|  90.4k|			wget_buffer_strcat(buf, s ? s : "(null)");
  ------------------
  |  Branch (365:28): [True: 90.4k, False: 0]
  ------------------
  366|  90.4k|			p++;
  367|  90.4k|			continue;
  368|  90.4k|		} else if (*p == 'd') {
  ------------------
  |  Branch (368:14): [True: 0, False: 0]
  ------------------
  369|      0|			convert_dec_fast(buf, va_arg(args, int));
  370|      0|			p++;
  371|      0|			continue;
  372|      0|		} else if (*p == 'c') {
  ------------------
  |  Branch (372:14): [True: 0, False: 0]
  ------------------
  373|      0|			char c = (char ) va_arg(args, int);
  374|      0|			wget_buffer_memcat(buf, &c, 1);
  375|      0|			p++;
  376|      0|			continue;
  377|      0|		} else if (*p == 'p') {
  ------------------
  |  Branch (377:14): [True: 0, False: 0]
  ------------------
  378|      0|			convert_pointer(buf, va_arg(args, void *));
  379|      0|			p++;
  380|      0|			continue;
  381|      0|		} else if (*p == '%') {
  ------------------
  |  Branch (381:14): [True: 0, False: 0]
  ------------------
  382|      0|			wget_buffer_memset_append(buf, '%', 1);
  383|      0|			p++;
  384|      0|			continue;
  385|      0|		}
  386|       |
  387|       |		/* Read the flag chars (optional, simplified) */
  388|      0|		p = read_flag_chars(p, &flags);
  389|       |
  390|       |		/*
  391|       |		 * Read field width (optional).
  392|       |		 * If '*', then the field width is given as an additional argument,
  393|       |		 * which precedes the argument to be formatted.
  394|       |		 */
  395|      0|		if (*p == '*') {
  ------------------
  |  Branch (395:7): [True: 0, False: 0]
  ------------------
  396|      0|			field_width = va_arg(args, int);
  397|      0|			p = read_field_width(p, &field_width, &flags, 1);
  398|      0|		} else {
  399|      0|			p = read_field_width(p, &field_width, &flags, 0);
  400|      0|		}
  401|       |
  402|       |		/*
  403|       |		 * Read precision (optional).
  404|       |		 * If '*', the precision is given as an additional argument,
  405|       |		 * just as the case for the field width.
  406|       |		 */
  407|      0|		if (*p == '.') {
  ------------------
  |  Branch (407:7): [True: 0, False: 0]
  ------------------
  408|      0|			if (*++p == '*') {
  ------------------
  |  Branch (408:8): [True: 0, False: 0]
  ------------------
  409|      0|				precision = va_arg(args, int);
  410|      0|				p = read_precision(p, &precision, 1);
  411|      0|			} else {
  412|      0|				p = read_precision(p, &precision, 0);
  413|      0|			}
  414|      0|		} else
  415|      0|			precision = -1;
  416|       |
  417|       |		/* Read length modifier (optional) */
  418|      0|		switch (*p) {
  419|      0|		case 'z':
  ------------------
  |  Branch (419:3): [True: 0, False: 0]
  ------------------
  420|      0|			arg = va_arg(args, ssize_t);
  421|      0|			argu = (size_t)arg;
  422|      0|			p++;
  423|      0|			break;
  424|       |
  425|      0|		case 'l':
  ------------------
  |  Branch (425:3): [True: 0, False: 0]
  ------------------
  426|      0|			if (p[1] == 'l') {
  ------------------
  |  Branch (426:8): [True: 0, False: 0]
  ------------------
  427|      0|				p += 2;
  428|      0|				arg = va_arg(args, long long);
  429|      0|				argu = (unsigned long long)arg;
  430|      0|			} else {
  431|      0|				p++;
  432|      0|				arg = (long)va_arg(args, long);
  433|      0|				argu = (unsigned long)arg;
  434|      0|			}
  435|      0|			break;
  436|       |
  437|      0|		case 'L':
  ------------------
  |  Branch (437:3): [True: 0, False: 0]
  ------------------
  438|      0|			p++;
  439|      0|			arg = va_arg(args, long long);
  440|      0|			argu = (unsigned long long)arg;
  441|      0|			break;
  442|       |
  443|      0|		case 'h':
  ------------------
  |  Branch (443:3): [True: 0, False: 0]
  ------------------
  444|      0|			if (p[1] == 'h') {
  ------------------
  |  Branch (444:8): [True: 0, False: 0]
  ------------------
  445|      0|				p += 2;
  446|      0|				arg = (signed char) va_arg(args, int);
  447|      0|				argu = (unsigned char) arg;
  448|      0|			} else {
  449|      0|				p++;
  450|      0|				arg = (short) va_arg(args, int);
  451|      0|				argu = (unsigned short) arg;
  452|      0|			}
  453|      0|			break;
  454|       |
  455|      0|		case 's':
  ------------------
  |  Branch (455:3): [True: 0, False: 0]
  ------------------
  456|      0|			p++;
  457|      0|			copy_string(buf, flags, field_width, precision, va_arg(args, const char *));
  458|      0|			continue;
  459|       |
  460|      0|		case 'c':
  ------------------
  |  Branch (460:3): [True: 0, False: 0]
  ------------------
  461|      0|		{
  462|      0|			char c[2] = { (char) va_arg(args, int), 0 };
  463|      0|			p++;
  464|      0|			copy_string(buf, flags, field_width, precision, c);
  465|      0|			continue;
  466|      0|		}
  467|       |
  468|      0|		case 'p': // %p shortcut
  ------------------
  |  Branch (468:3): [True: 0, False: 0]
  ------------------
  469|      0|			p++;
  470|      0|			convert_dec(buf, flags | FLAG_HEXLO | FLAG_ALTERNATE, field_width, precision, (long long)(ptrdiff_t)va_arg(args, void *));
  ------------------
  |  |   53|      0|#define FLAG_HEXLO        64U
  ------------------
              			convert_dec(buf, flags | FLAG_HEXLO | FLAG_ALTERNATE, field_width, precision, (long long)(ptrdiff_t)va_arg(args, void *));
  ------------------
  |  |   49|      0|#define FLAG_ALTERNATE     4U
  ------------------
  471|      0|			continue;
  472|       |
  473|      0|		default:
  ------------------
  |  Branch (473:3): [True: 0, False: 0]
  ------------------
  474|      0|			arg = va_arg(args, int);
  475|      0|			argu = (unsigned int)arg;
  476|      0|		}
  477|       |
  478|      0|		if (*p == 'd' || *p == 'i') {
  ------------------
  |  Branch (478:7): [True: 0, False: 0]
  |  Branch (478:20): [True: 0, False: 0]
  ------------------
  479|      0|			convert_dec(buf, flags | FLAG_SIGNED | FLAG_DECIMAL, field_width, precision, arg);
  ------------------
  |  |   50|      0|#define FLAG_SIGNED        8U
  ------------------
              			convert_dec(buf, flags | FLAG_SIGNED | FLAG_DECIMAL, field_width, precision, arg);
  ------------------
  |  |   51|      0|#define FLAG_DECIMAL      16U
  ------------------
  480|      0|		} else if (*p == 'u') {
  ------------------
  |  Branch (480:14): [True: 0, False: 0]
  ------------------
  481|      0|			convert_dec(buf, flags | FLAG_DECIMAL, field_width, precision, (long long) argu);
  ------------------
  |  |   51|      0|#define FLAG_DECIMAL      16U
  ------------------
  482|      0|		} else if (*p == 'x') {
  ------------------
  |  Branch (482:14): [True: 0, False: 0]
  ------------------
  483|      0|			convert_dec(buf, flags | FLAG_HEXLO, field_width, precision, (long long) argu);
  ------------------
  |  |   53|      0|#define FLAG_HEXLO        64U
  ------------------
  484|      0|		} else if (*p == 'X') {
  ------------------
  |  Branch (484:14): [True: 0, False: 0]
  ------------------
  485|      0|			convert_dec(buf, flags | FLAG_HEXUP, field_width, precision, (long long) argu);
  ------------------
  |  |   54|      0|#define FLAG_HEXUP       128U
  ------------------
  486|      0|		} else if (*p == 'o') {
  ------------------
  |  Branch (486:14): [True: 0, False: 0]
  ------------------
  487|      0|			convert_dec(buf, flags | FLAG_OCTAL, field_width, precision, (long long) argu);
  ------------------
  |  |   52|      0|#define FLAG_OCTAL        32U
  ------------------
  488|      0|		} else {
  489|       |			/*
  490|       |			 * This is an unknown conversion specifier,
  491|       |			 * so just put '%' and move on.
  492|       |			 */
  493|      0|			wget_buffer_memset_append(buf, '%', 1);
  494|      0|			p = begin + 1;
  495|      0|			continue;
  496|      0|		}
  497|       |
  498|      0|		p++;
  499|      0|	}
  500|       |
  501|  64.2k|	return buf->length;
  502|  64.2k|}
wget_buffer_vprintf:
  521|  64.2k|{
  522|  64.2k|	buf->length = 0;
  523|       |
  524|  64.2k|	return wget_buffer_vprintf_append(buf, fmt, args);
  525|  64.2k|}

wget_console_init:
  125|  28.7k|{
  126|       |#ifdef _WIN32
  127|       |	static int win_init;
  128|       |
  129|       |	if (win_init)
  130|       |		return 0;
  131|       |
  132|       |	g_stdout_hnd = GetStdHandle(STD_OUTPUT_HANDLE);
  133|       |	if (g_stdout_hnd != INVALID_HANDLE_VALUE) {
  134|       |		GetConsoleScreenBufferInfo(g_stdout_hnd, &g_console_info);
  135|       |
  136|       |		if (GetFileType(g_stdout_hnd) != FILE_TYPE_CHAR) /* The console is redirected */
  137|       |			g_stdout_hnd = INVALID_HANDLE_VALUE;
  138|       |	}
  139|       |	SetupConsoleHandle(true, GetStdHandle(STD_INPUT_HANDLE));
  140|       |	SetupConsoleHandle(false, GetStdHandle(STD_OUTPUT_HANDLE));
  141|       |	win_init = 1;
  142|       |#endif
  143|       |
  144|  28.7k|	atexit(reset_color);
  145|       |
  146|  28.7k|	return 0;
  147|  28.7k|}
wget_console_deinit:
  155|  9.59k|{
  156|  9.59k|	reset_color();
  157|       |
  158|  9.59k|	return 0;
  159|  9.59k|}
console.c:reset_color:
   46|  38.3k|{
   47|       |#ifdef _WIN32
   48|       |	fflush(stdout);
   49|       |
   50|       |	if (g_stdout_hnd != INVALID_HANDLE_VALUE) {
   51|       |		SetConsoleTextAttribute(g_stdout_hnd, g_console_info.wAttributes);
   52|       |		g_stdout_hnd = INVALID_HANDLE_VALUE;
   53|       |	}
   54|       |#else
   55|  38.3k|	if (isatty(fileno(stdout)))
  ------------------
  |  Branch (55:6): [True: 0, False: 38.3k]
  ------------------
   56|      0|		fputs("\033[m", stdout);
   57|  38.3k|	fflush(stdout);
   58|  38.3k|#endif
   59|  38.3k|}

wget_cookie_db_deinit:
  314|  9.59k|{
  315|  9.59k|	if (cookie_db) {
  ------------------
  |  Branch (315:6): [True: 0, False: 9.59k]
  ------------------
  316|      0|#ifdef WITH_LIBPSL
  317|      0|		psl_free(cookie_db->psl);
  318|      0|		cookie_db->psl = NULL;
  319|      0|#endif
  320|      0|		wget_thread_mutex_lock(cookie_db->mutex);
  321|      0|		wget_vector_free(&cookie_db->cookies);
  322|      0|		wget_thread_mutex_unlock(cookie_db->mutex);
  323|      0|		wget_thread_mutex_destroy(&cookie_db->mutex);
  324|      0|	}
  325|  9.59k|}
wget_cookie_db_free:
  328|  9.59k|{
  329|  9.59k|	if (cookie_db) {
  ------------------
  |  Branch (329:6): [True: 9.59k, False: 0]
  ------------------
  330|  9.59k|		wget_cookie_db_deinit(*cookie_db);
  331|  9.59k|		xfree(*cookie_db);
  ------------------
  |  |   53|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 0, False: 9.59k]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  332|  9.59k|	}
  333|  9.59k|}

wget_content_encoding_by_name:
  642|  1.51k|{
  643|  1.51k|	if (name) {
  ------------------
  |  Branch (643:6): [True: 1.51k, False: 0]
  ------------------
  644|  11.6k|		for (wget_content_encoding it = 0; it < wget_content_encoding_max; it++) {
  ------------------
  |  Branch (644:38): [True: 10.5k, False: 1.06k]
  ------------------
  645|  10.5k|			if (!strcmp(_encoding_names[it], name))
  ------------------
  |  Branch (645:8): [True: 450, False: 10.1k]
  ------------------
  646|    450|				return it;
  647|  10.5k|		}
  648|       |
  649|  1.06k|		if (!strcmp("none", name))
  ------------------
  |  Branch (649:7): [True: 903, False: 165]
  ------------------
  650|    903|			return wget_content_encoding_identity;
  651|  1.06k|	}
  652|       |
  653|    165|	return wget_content_encoding_unknown;
  654|  1.51k|}
wget_content_encoding_to_name:
  657|    182|{
  658|    182|	if (type >= 0 && type < wget_content_encoding_max)
  ------------------
  |  Branch (658:6): [True: 17, False: 165]
  |  Branch (658:19): [True: 17, False: 0]
  ------------------
  659|     17|		return _encoding_names[type];
  660|       |
  661|    165|	return NULL;
  662|    182|}

dns.c:dns_init:
   81|  9.50k|{
   82|  9.50k|	if (!initialized) {
  ------------------
  |  Branch (82:6): [True: 2, False: 9.50k]
  ------------------
   83|      2|		wget_thread_mutex_init(&default_dns.mutex);
   84|      2|		initialized = true;
   85|      2|		atexit(dns_exit);
   86|      2|	}
   87|  9.50k|}
wget_dns_init:
   98|  9.50k|{
   99|  9.50k|	dns_init();
  100|       |
  101|  9.50k|	if (!dns)
  ------------------
  |  Branch (101:6): [True: 0, False: 9.50k]
  ------------------
  102|      0|		return WGET_E_SUCCESS;
  103|       |
  104|  9.50k|	wget_dns *_dns = wget_calloc(1, sizeof(wget_dns));
  105|       |
  106|  9.50k|	if (!_dns)
  ------------------
  |  Branch (106:6): [True: 0, False: 9.50k]
  ------------------
  107|      0|		return WGET_E_MEMORY;
  108|       |
  109|  9.50k|	if (wget_thread_mutex_init(&_dns->mutex)) {
  ------------------
  |  Branch (109:6): [True: 0, False: 9.50k]
  ------------------
  110|      0|		xfree(_dns);
  ------------------
  |  |   53|      0|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 0, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  111|      0|		return WGET_E_INVALID;
  112|      0|	}
  113|       |
  114|  9.50k|	_dns->timeout = -1;
  115|  9.50k|	*dns = _dns;
  116|       |
  117|  9.50k|	return WGET_E_SUCCESS;
  118|  9.50k|}
wget_dns_free:
  127|  9.59k|{
  128|  9.59k|	if (!dns) {
  ------------------
  |  Branch (128:6): [True: 0, False: 9.59k]
  ------------------
  129|      0|		dns_exit();
  130|      0|		return;
  131|      0|	}
  132|       |
  133|  9.59k|	if (*dns) {
  ------------------
  |  Branch (133:6): [True: 9.50k, False: 92]
  ------------------
  134|  9.50k|		wget_thread_mutex_destroy(&(*dns)->mutex);
  135|  9.50k|		xfree(*dns);
  ------------------
  |  |   53|  9.50k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 9.50k, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  136|  9.50k|	}
  137|  9.59k|}
wget_dns_set_timeout:
  156|  9.50k|{
  157|  9.50k|	(dns ? dns : &default_dns)->timeout = timeout;
  ------------------
  |  Branch (157:3): [True: 9.50k, False: 0]
  ------------------
  158|  9.50k|}
wget_dns_set_cache:
  169|  1.59k|{
  170|  1.59k|	(dns ? dns : &default_dns)->cache = cache;
  ------------------
  |  Branch (170:3): [True: 1.59k, False: 0]
  ------------------
  171|  1.59k|}
wget_dns_cache_ip:
  302|  1.43k|{
  303|  1.43k|	int rc, family;
  304|  1.43k|	struct addrinfo *ai;
  305|       |
  306|  1.43k|	if (!dns || !dns->cache || !name)
  ------------------
  |  Branch (306:6): [True: 0, False: 1.43k]
  |  Branch (306:14): [True: 1.43k, False: 0]
  |  Branch (306:29): [True: 0, False: 0]
  ------------------
  307|  1.43k|		return WGET_E_INVALID;
  308|       |
  309|      0|	if (wget_ip_is_family(ip, WGET_NET_FAMILY_IPV4)) {
  ------------------
  |  | 1883|      0|#define WGET_NET_FAMILY_IPV4 1
  ------------------
  |  Branch (309:6): [True: 0, False: 0]
  ------------------
  310|      0|		family = AF_INET;
  311|      0|	} else if (wget_ip_is_family(ip, WGET_NET_FAMILY_IPV6)) {
  ------------------
  |  | 1884|      0|#define WGET_NET_FAMILY_IPV6 2
  ------------------
  |  Branch (311:13): [True: 0, False: 0]
  ------------------
  312|      0|		family = AF_INET6;
  313|      0|	} else
  314|      0|		return WGET_E_INVALID;
  315|       |
  316|      0|	if ((rc = resolve(family, AI_NUMERICHOST, ip, port, &ai)) != 0) {
  ------------------
  |  Branch (316:6): [True: 0, False: 0]
  ------------------
  317|      0|		if (family == AF_INET6)
  ------------------
  |  Branch (317:7): [True: 0, False: 0]
  ------------------
  318|      0|			error_printf(_("Failed to resolve '[%s]:%d': %s\n"), ip, port, gai_strerror(rc));
  ------------------
  |  |   66|      0|#define error_printf wget_error_printf
  ------------------
              			error_printf(_("Failed to resolve '[%s]:%d': %s\n"), ip, port, gai_strerror(rc));
  ------------------
  |  |   47|      0|#	define _(STRING) gettext(STRING)
  ------------------
  319|      0|		else
  320|      0|			error_printf(_("Failed to resolve '%s:%d': %s\n"), ip, port, gai_strerror(rc));
  ------------------
  |  |   66|      0|#define error_printf wget_error_printf
  ------------------
              			error_printf(_("Failed to resolve '%s:%d': %s\n"), ip, port, gai_strerror(rc));
  ------------------
  |  |   47|      0|#	define _(STRING) gettext(STRING)
  ------------------
  321|      0|		return WGET_E_UNKNOWN;
  322|      0|	}
  323|       |
  324|      0|	if ((rc = wget_dns_cache_add(dns->cache, name, port, &ai)) < 0) {
  ------------------
  |  Branch (324:6): [True: 0, False: 0]
  ------------------
  325|      0|		freeaddrinfo(ai);
  326|      0|		return rc;
  327|      0|	}
  328|       |
  329|      0|	return WGET_E_SUCCESS;
  330|      0|}
wget_dns_set_stats_callback:
  489|     35|{
  490|     35|	if (!dns)
  ------------------
  |  Branch (490:6): [True: 0, False: 35]
  ------------------
  491|      0|		dns = &default_dns;
  492|       |
  493|     35|	dns->stats_callback = fn;
  494|     35|	dns->stats_ctx = ctx;
  495|     35|}

wget_dns_cache_init:
   95|  1.59k|{
   96|  1.59k|	wget_dns_cache *_cache = wget_calloc(1, sizeof(wget_dns_cache));
   97|       |
   98|  1.59k|	if (!_cache)
  ------------------
  |  Branch (98:6): [True: 0, False: 1.59k]
  ------------------
   99|      0|		return WGET_E_MEMORY;
  100|       |
  101|  1.59k|	if (wget_thread_mutex_init(&_cache->mutex)) {
  ------------------
  |  Branch (101:6): [True: 0, False: 1.59k]
  ------------------
  102|      0|		xfree(_cache);
  ------------------
  |  |   53|      0|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 0, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  103|      0|		return WGET_E_INVALID;
  104|      0|	}
  105|       |
  106|  1.59k|	if (!(_cache->cache = wget_hashmap_create(16, (wget_hashmap_hash_fn *) hash_dns, (wget_hashmap_compare_fn *) compare_dns))) {
  ------------------
  |  Branch (106:6): [True: 0, False: 1.59k]
  ------------------
  107|      0|		wget_dns_cache_free(&_cache);
  108|      0|		return WGET_E_MEMORY;
  109|      0|	}
  110|       |
  111|  1.59k|	wget_hashmap_set_key_destructor(_cache->cache, (wget_hashmap_key_destructor *) free_dns);
  112|  1.59k|	wget_hashmap_set_value_destructor(_cache->cache, (wget_hashmap_value_destructor *) free_dns);
  113|       |
  114|  1.59k|	*cache = _cache;
  115|       |
  116|  1.59k|	return WGET_E_SUCCESS;
  117|  1.59k|}
wget_dns_cache_free:
  125|  9.59k|{
  126|  9.59k|	if (cache && *cache) {
  ------------------
  |  Branch (126:6): [True: 9.59k, False: 0]
  |  Branch (126:15): [True: 1.59k, False: 7.99k]
  ------------------
  127|  1.59k|		wget_thread_mutex_lock((*cache)->mutex);
  128|  1.59k|		wget_hashmap_free(&(*cache)->cache);
  129|  1.59k|		wget_thread_mutex_unlock((*cache)->mutex);
  130|       |
  131|  1.59k|		wget_thread_mutex_destroy(&(*cache)->mutex);
  132|  1.59k|		xfree(*cache);
  ------------------
  |  |   53|  1.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 1.59k, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  133|  1.59k|	}
  134|  9.59k|}

wget_local_charset_encoding:
   55|  9.38k|{
   56|  9.38k|	const char *encoding = nl_langinfo(CODESET);
   57|       |
   58|  9.38k|	if (encoding && *encoding)
  ------------------
  |  Branch (58:6): [True: 9.38k, False: 0]
  |  Branch (58:18): [True: 9.38k, False: 0]
  ------------------
   59|  9.38k|		return wget_strdup(encoding);
   60|       |
   61|      0|	return wget_strdup("ASCII");
   62|  9.38k|}
wget_memiconv:
   66|  25.5k|{
   67|  25.5k|	if (!src)
  ------------------
  |  Branch (67:6): [True: 0, False: 25.5k]
  ------------------
   68|      0|		return WGET_E_INVALID;
   69|       |
   70|  25.5k|#ifdef HAVE_ICONV
   71|  25.5k|	if (!src_encoding)
  ------------------
  |  Branch (71:6): [True: 0, False: 25.5k]
  ------------------
   72|      0|		src_encoding = "iso-8859-1"; // default character-set for most browsers
   73|  25.5k|	if (!dst_encoding)
  ------------------
  |  Branch (73:6): [True: 0, False: 25.5k]
  ------------------
   74|      0|		dst_encoding = "iso-8859-1"; // default character-set for most browsers
   75|       |
   76|  25.5k|	if (wget_strcasecmp_ascii(src_encoding, dst_encoding)) {
  ------------------
  |  Branch (76:6): [True: 25.5k, False: 0]
  ------------------
   77|  25.5k|		int ret = WGET_E_UNKNOWN;
   78|  25.5k|		iconv_t cd = iconv_open(dst_encoding, src_encoding);
   79|       |
   80|  25.5k|		if (cd != (iconv_t)-1) {
  ------------------
  |  Branch (80:7): [True: 24.5k, False: 990]
  ------------------
   81|  24.5k|			char *tmp = (char *) src; // iconv won't change where src points to, but changes tmp itself
   82|  24.5k|			size_t tmp_len = srclen;
   83|  24.5k|			size_t dst_len = tmp_len * 6, dst_len_tmp = dst_len;
   84|  24.5k|			char *dst = wget_malloc(dst_len + 1), *dst_tmp = dst;
   85|       |
   86|  24.5k|			if (!dst) {
  ------------------
  |  Branch (86:8): [True: 0, False: 24.5k]
  ------------------
   87|      0|				iconv_close(cd);
   88|      0|				return WGET_E_MEMORY;
   89|      0|			}
   90|       |
   91|  24.5k|			errno = 0;
   92|  24.5k|			if (iconv(cd, (ICONV_CONST char **)&tmp, &tmp_len, &dst_tmp, &dst_len_tmp) == 0
  ------------------
  |  Branch (92:8): [True: 5.62k, False: 18.9k]
  ------------------
   93|  24.5k|				&& iconv(cd, NULL, NULL, &dst_tmp, &dst_len_tmp) == 0)
  ------------------
  |  Branch (93:8): [True: 5.62k, False: 0]
  ------------------
   94|  5.62k|			{
   95|  5.62k|				debug_printf("transcoded %zu bytes from '%s' to '%s'\n", srclen, src_encoding, dst_encoding);
  ------------------
  |  |   68|  5.62k|#define debug_printf wget_debug_printf
  ------------------
   96|  5.62k|				if (out) {
  ------------------
  |  Branch (96:9): [True: 5.62k, False: 0]
  ------------------
   97|       |					// here we reduce the allocated memory size, if it fails we use the original memory chunk
   98|  5.62k|					tmp = wget_realloc(dst, dst_len - dst_len_tmp + 1);
   99|  5.62k|					if (!tmp)
  ------------------
  |  Branch (99:10): [True: 0, False: 5.62k]
  ------------------
  100|      0|						tmp = dst;
  101|  5.62k|					tmp[dst_len - dst_len_tmp] = 0;
  102|  5.62k|					*out = tmp;
  103|  5.62k|				} else
  104|      0|					xfree(dst);
  ------------------
  |  |   53|      0|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 0, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  105|       |
  106|  5.62k|				if (outlen)
  ------------------
  |  Branch (106:9): [True: 0, False: 5.62k]
  ------------------
  107|      0|					*outlen = dst_len - dst_len_tmp;
  108|       |
  109|  5.62k|				ret = WGET_E_SUCCESS;
  110|  18.9k|			} else {
  111|       |				// erno == 0 means some codepoints were encoded non-reversible, treat as error
  112|  18.9k|				error_printf(_("Failed to transcode '%s' string into '%s' (%d)\n"), src_encoding, dst_encoding, errno);
  ------------------
  |  |   66|  18.9k|#define error_printf wget_error_printf
  ------------------
              				error_printf(_("Failed to transcode '%s' string into '%s' (%d)\n"), src_encoding, dst_encoding, errno);
  ------------------
  |  |   47|  18.9k|#	define _(STRING) gettext(STRING)
  ------------------
  113|  18.9k|				xfree(dst);
  ------------------
  |  |   53|  18.9k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 18.9k, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  114|       |
  115|  18.9k|				if (out)
  ------------------
  |  Branch (115:9): [True: 18.9k, False: 0]
  ------------------
  116|  18.9k|					*out = NULL;
  117|       |
  118|  18.9k|				if (outlen)
  ------------------
  |  Branch (118:9): [True: 0, False: 18.9k]
  ------------------
  119|      0|					*outlen = 0;
  120|  18.9k|			}
  121|       |
  122|  24.5k|			iconv_close(cd);
  123|  24.5k|		} else
  124|    990|			error_printf(_("Failed to prepare transcoding '%s' into '%s' (%d)\n"), src_encoding, dst_encoding, errno);
  ------------------
  |  |   66|    990|#define error_printf wget_error_printf
  ------------------
              			error_printf(_("Failed to prepare transcoding '%s' into '%s' (%d)\n"), src_encoding, dst_encoding, errno);
  ------------------
  |  |   47|    990|#	define _(STRING) gettext(STRING)
  ------------------
  125|       |
  126|  25.5k|		return ret;
  127|  25.5k|	}
  128|      0|#endif
  129|       |
  130|      0|	if (out)
  ------------------
  |  Branch (130:6): [True: 0, False: 0]
  ------------------
  131|      0|		*out = wget_strmemdup(src, srclen);
  132|       |
  133|      0|	if (outlen)
  ------------------
  |  Branch (133:6): [True: 0, False: 0]
  ------------------
  134|      0|		*outlen = srclen;
  135|       |
  136|      0|	return WGET_E_SUCCESS;
  137|  25.5k|}
wget_striconv:
  141|  25.5k|{
  142|  25.5k|	if (!src)
  ------------------
  |  Branch (142:6): [True: 0, False: 25.5k]
  ------------------
  143|      0|		return NULL;
  144|       |
  145|  25.5k|	char *dst;
  146|  25.5k|	if (wget_memiconv(src_encoding, src, strlen(src), dst_encoding, &dst, NULL))
  ------------------
  |  Branch (146:6): [True: 19.9k, False: 5.62k]
  ------------------
  147|  19.9k|		return NULL;
  148|       |
  149|  5.62k|	return dst;
  150|  25.5k|}
wget_str_needs_encoding:
  153|  70.4k|{
  154|  70.4k|	if (!s)
  ------------------
  |  Branch (154:6): [True: 0, False: 70.4k]
  ------------------
  155|      0|		return false;
  156|       |
  157|   211k|	while (*s && (*s & ~0x7f) == 0) s++;
  ------------------
  |  Branch (157:9): [True: 190k, False: 21.1k]
  |  Branch (157:15): [True: 141k, False: 49.2k]
  ------------------
  158|       |
  159|  70.4k|	return *s != 0;
  160|  70.4k|}
wget_str_to_utf8:
  192|  25.5k|{
  193|  25.5k|	return wget_striconv(src, encoding, "utf-8");
  194|  25.5k|}
wget_str_to_ascii:
  244|  31.0k|{
  245|  31.0k|#ifdef WITH_LIBIDN2
  246|  31.0k|	if (wget_str_needs_encoding(src)) {
  ------------------
  |  Branch (246:6): [True: 23.6k, False: 7.31k]
  ------------------
  247|  23.6k|		char *asc = NULL;
  248|  23.6k|		int rc;
  249|  23.6k|		if ((rc = idn2_lookup_u8((uint8_t *)src, (uint8_t **)&asc, IDN2_NONTRANSITIONAL|IDN2_USE_STD3_ASCII_RULES)) != IDN2_OK)
  ------------------
  |  Branch (249:7): [True: 18.7k, False: 4.91k]
  ------------------
  250|  18.7k|			rc = idn2_lookup_u8((uint8_t *)src, (uint8_t **)&asc, IDN2_TRANSITIONAL|IDN2_USE_STD3_ASCII_RULES);
  251|  23.6k|		if (rc == IDN2_OK)
  ------------------
  |  Branch (251:7): [True: 11.2k, False: 12.4k]
  ------------------
  252|  11.2k|		{
  253|  11.2k|			debug_printf("idn2 '%s' -> '%s'\n", src, asc);
  ------------------
  |  |   68|  11.2k|#define debug_printf wget_debug_printf
  ------------------
  254|       |#  ifdef _WIN32
  255|       |				src = wget_strdup(asc);
  256|       |				idn2_free(asc);
  257|       |#  else
  258|  11.2k|				src = asc;
  259|  11.2k|#  endif
  260|  11.2k|		} else
  261|  12.4k|			error_printf(_("toASCII(%s) failed (%d): %s\n"), src, rc, idn2_strerror(rc));
  ------------------
  |  |   66|  12.4k|#define error_printf wget_error_printf
  ------------------
              			error_printf(_("toASCII(%s) failed (%d): %s\n"), src, rc, idn2_strerror(rc));
  ------------------
  |  |   47|  12.4k|#	define _(STRING) gettext(STRING)
  ------------------
  262|  23.6k|	}
  263|       |#elif defined WITH_LIBIDN
  264|       |	if (wget_str_needs_encoding(src)) {
  265|       |		char *asc = NULL;
  266|       |
  267|       |		if (_utf8_is_valid(src)) {
  268|       |			int rc;
  269|       |
  270|       |			// idna_to_ascii_8z() automatically converts UTF-8 to lowercase
  271|       |			if ((rc = idna_to_ascii_8z(src, &asc, IDNA_USE_STD3_ASCII_RULES)) == IDNA_SUCCESS) {
  272|       |				// debug_printf("toASCII '%s' -> '%s'\n", src, asc);
  273|       |# ifdef _WIN32
  274|       |				src = wget_strdup(asc);
  275|       |				idn_free(asc);
  276|       |# else
  277|       |				src = asc;
  278|       |# endif
  279|       |			} else
  280|       |				error_printf(_("toASCII failed (%d): %s\n"), rc, idna_strerror(rc));
  281|       |		}
  282|       |		else
  283|       |			error_printf(_("Invalid UTF-8 sequence not converted: '%s'\n"), src);
  284|       |	}
  285|       |#else
  286|       |	if (wget_str_needs_encoding(src)) {
  287|       |		error_printf(_("toASCII not available: '%s'\n"), src);
  288|       |	}
  289|       |#endif
  290|       |
  291|  31.0k|	return src;
  292|  31.0k|}

wget_hashmap_create:
  168|  11.1k|{
  169|  11.1k|	wget_hashmap *h = wget_malloc(sizeof(wget_hashmap));
  170|       |
  171|  11.1k|	if (!h)
  ------------------
  |  Branch (171:6): [True: 0, False: 11.1k]
  ------------------
  172|      0|		return NULL;
  173|       |
  174|  11.1k|	h->entry = wget_calloc(max, sizeof(entry_t *));
  175|       |
  176|  11.1k|	if (!h->entry) {
  ------------------
  |  Branch (176:6): [True: 0, False: 11.1k]
  ------------------
  177|      0|		xfree(h);
  ------------------
  |  |   53|      0|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 0, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  178|      0|		return NULL;
  179|      0|	}
  180|       |
  181|  11.1k|	h->max = max;
  182|  11.1k|	h->cur = 0;
  183|  11.1k|	h->resize_factor = 2;
  184|  11.1k|	h->hash = hash;
  185|  11.1k|	h->cmp = cmp;
  186|  11.1k|	h->key_destructor = free;
  187|  11.1k|	h->value_destructor = free;
  188|  11.1k|	h->load_factor = 0.75;
  189|  11.1k|	h->threshold = (int)(max * h->load_factor);
  190|       |
  191|  11.1k|	return h;
  192|  11.1k|}
wget_hashmap_get:
  343|     50|{
  344|     50|	if (h && key) {
  ------------------
  |  Branch (344:6): [True: 50, False: 0]
  |  Branch (344:11): [True: 50, False: 0]
  ------------------
  345|     50|		entry_t *entry;
  346|       |
  347|     50|		if ((entry = hashmap_find_entry(h, key, h->hash(key)))) {
  ------------------
  |  Branch (347:7): [True: 0, False: 50]
  ------------------
  348|      0|			if (value)
  ------------------
  |  Branch (348:8): [True: 0, False: 0]
  ------------------
  349|      0|				*value = entry->value;
  350|      0|			return 1;
  351|      0|		}
  352|     50|	}
  353|       |
  354|     50|	return 0;
  355|     50|}
wget_hashmap_free:
  436|  15.9k|{
  437|  15.9k|	if (h && *h) {
  ------------------
  |  Branch (437:6): [True: 15.9k, False: 0]
  |  Branch (437:11): [True: 11.1k, False: 4.79k]
  ------------------
  438|  11.1k|		wget_hashmap_clear(*h);
  439|  11.1k|		xfree((*h)->entry);
  ------------------
  |  |   53|  11.1k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 11.1k, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  440|  11.1k|		xfree(*h);
  ------------------
  |  |   53|  11.1k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 11.1k, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  441|  11.1k|	}
  442|  15.9k|}
wget_hashmap_clear:
  452|  11.1k|{
  453|  11.1k|	if (h) {
  ------------------
  |  Branch (453:6): [True: 11.1k, False: 0]
  ------------------
  454|  11.1k|		entry_t *entry, *next;
  455|  11.1k|		int it, cur = h->cur;
  456|       |
  457|  11.1k|		for (it = 0; it < h->max && cur; it++) {
  ------------------
  |  Branch (457:16): [True: 11.1k, False: 0]
  |  Branch (457:31): [True: 0, False: 11.1k]
  ------------------
  458|      0|			for (entry = h->entry[it]; entry; entry = next) {
  ------------------
  |  Branch (458:31): [True: 0, False: 0]
  ------------------
  459|      0|				next = entry->next;
  460|       |
  461|      0|				if (h->key_destructor)
  ------------------
  |  Branch (461:9): [True: 0, False: 0]
  ------------------
  462|      0|					h->key_destructor(entry->key);
  463|       |
  464|       |				// free value if different from key
  465|      0|				if (h->value_destructor) {
  ------------------
  |  Branch (465:9): [True: 0, False: 0]
  ------------------
  466|      0|					if (entry->value != entry->key || (entry->value == entry->key && !h->key_destructor))
  ------------------
  |  Branch (466:10): [True: 0, False: 0]
  |  Branch (466:41): [True: 0, False: 0]
  |  Branch (466:71): [True: 0, False: 0]
  ------------------
  467|      0|						h->value_destructor(entry->value);
  468|      0|				}
  469|       |
  470|      0|				entry->key = NULL;
  471|      0|				entry->value = NULL;
  472|       |
  473|      0|				xfree(entry);
  ------------------
  |  |   53|      0|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 0, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  474|      0|				cur--;
  475|      0|			}
  476|      0|			h->entry[it] = NULL;
  477|      0|		}
  478|  11.1k|		h->cur = 0;
  479|  11.1k|	}
  480|  11.1k|}
wget_hashmap_set_key_destructor:
  574|  11.1k|{
  575|  11.1k|	if (h)
  ------------------
  |  Branch (575:6): [True: 11.1k, False: 0]
  ------------------
  576|  11.1k|		h->key_destructor = destructor;
  577|  11.1k|}
wget_hashmap_set_value_destructor:
  588|  11.1k|{
  589|  11.1k|	if (h)
  ------------------
  |  Branch (589:6): [True: 11.1k, False: 0]
  ------------------
  590|  11.1k|		h->value_destructor = destructor;
  591|  11.1k|}
hashmap.c:hashmap_find_entry:
  196|     50|{
  197|     50|	for (entry_t * e = h->entry[hash % h->max]; e; e = e->next) {
  ------------------
  |  Branch (197:46): [True: 0, False: 50]
  ------------------
  198|      0|		if (hash == e->hash && (key == e->key || !h->cmp(key, e->key))) {
  ------------------
  |  Branch (198:7): [True: 0, False: 0]
  |  Branch (198:27): [True: 0, False: 0]
  |  Branch (198:44): [True: 0, False: 0]
  ------------------
  199|      0|			return e;
  200|      0|		}
  201|      0|	}
  202|       |
  203|     50|	return NULL;
  204|     50|}

wget_hpkp_db_free:
  121|  9.59k|{
  122|  9.59k|	if (plugin_vtable) {
  ------------------
  |  Branch (122:6): [True: 0, False: 9.59k]
  ------------------
  123|      0|		plugin_vtable->free(hpkp_db);
  124|      0|		return;
  125|      0|	}
  126|       |
  127|  9.59k|	if (hpkp_db && *hpkp_db) {
  ------------------
  |  Branch (127:6): [True: 9.59k, False: 0]
  |  Branch (127:17): [True: 0, False: 9.59k]
  ------------------
  128|      0|		wget_hpkp_db_deinit(*hpkp_db);
  129|      0|		xfree(*hpkp_db);
  ------------------
  |  |   53|      0|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 0, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  130|      0|	}
  131|  9.59k|}

wget_hsts_db_free:
  247|  9.59k|{
  248|  9.59k|	if (plugin_vtable) {
  ------------------
  |  Branch (248:6): [True: 0, False: 9.59k]
  ------------------
  249|      0|		plugin_vtable->free(hsts_db);
  250|      0|		return;
  251|      0|	}
  252|       |
  253|  9.59k|	if (hsts_db && *hsts_db) {
  ------------------
  |  Branch (253:6): [True: 9.59k, False: 0]
  |  Branch (253:17): [True: 0, False: 9.59k]
  ------------------
  254|      0|		wget_hsts_db_deinit(*hsts_db);
  255|      0|		xfree(*hsts_db);
  ------------------
  |  |   53|      0|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 0, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  256|      0|	}
  257|  9.59k|}

http.c:http_init:
   81|      2|{
   82|      2|	if (!initialized) {
  ------------------
  |  Branch (82:6): [True: 2, False: 0]
  ------------------
   83|      2|		wget_thread_mutex_init(&proxy_mutex);
   84|      2|		wget_thread_mutex_init(&hosts_mutex);
   85|      2|		initialized = true;
   86|      2|		atexit(http_exit);
   87|      2|	}
   88|      2|}
wget_http_set_http_proxy:
 1211|  10.1k|{
 1212|  10.1k|	if (http_proxies)
  ------------------
  |  Branch (1212:6): [True: 450, False: 9.68k]
  ------------------
 1213|    450|		wget_vector_free(&http_proxies);
 1214|       |
 1215|  10.1k|	http_proxies = parse_proxies(proxy, encoding);
 1216|       |
 1217|  10.1k|	return wget_vector_size(http_proxies);
 1218|  10.1k|}
wget_http_set_https_proxy:
 1221|  9.60k|{
 1222|  9.60k|	if (https_proxies)
  ------------------
  |  Branch (1222:6): [True: 10, False: 9.59k]
  ------------------
 1223|     10|		wget_vector_free(&https_proxies);
 1224|       |
 1225|  9.60k|	https_proxies = parse_proxies(proxy, encoding);
 1226|       |
 1227|  9.60k|	return wget_vector_size(https_proxies);
 1228|  9.60k|}
wget_http_set_no_proxy:
 1231|  9.69k|{
 1232|  9.69k|	if (no_proxies)
  ------------------
  |  Branch (1232:6): [True: 103, False: 9.59k]
  ------------------
 1233|    103|		wget_vector_free(&no_proxies);
 1234|       |
 1235|  9.69k|	no_proxies = parse_no_proxies(no_proxy, encoding);
 1236|  9.69k|	if (!no_proxies)
  ------------------
  |  Branch (1236:6): [True: 9.59k, False: 103]
  ------------------
 1237|  9.59k|		return -1;
 1238|       |
 1239|    103|	return 0;
 1240|  9.69k|}
wget_server_set_stats_callback:
 1366|      8|{
 1367|      8|	server_stats_callback = fn;
 1368|      8|}
http.c:parse_proxies:
 1139|  19.7k|{
 1140|  19.7k|	if (!proxy)
  ------------------
  |  Branch (1140:6): [True: 19.1k, False: 549]
  ------------------
 1141|  19.1k|		return NULL;
 1142|       |
 1143|    549|	wget_vector *proxies = NULL;
 1144|    549|	const char *s, *p;
 1145|       |
 1146|  12.3k|	for (s = p = proxy; *p; s = p + 1) {
  ------------------
  |  Branch (1146:22): [True: 11.8k, False: 549]
  ------------------
 1147|  11.8k|		if ((p = strchrnul(s, ',')) != s && p - s < 256) {
  ------------------
  |  Branch (1147:7): [True: 10.9k, False: 897]
  |  Branch (1147:39): [True: 10.9k, False: 10]
  ------------------
 1148|  10.9k|			wget_iri *iri;
 1149|  10.9k|			char host[256];
 1150|       |
 1151|  10.9k|			wget_strmemcpy(host, sizeof(host), s, p - s);
 1152|       |
 1153|  10.9k|			iri = wget_iri_parse (host, encoding);
 1154|  10.9k|			if (iri) {
  ------------------
  |  Branch (1154:8): [True: 9.23k, False: 1.68k]
  ------------------
 1155|  9.23k|				if (!proxies) {
  ------------------
  |  Branch (1155:9): [True: 460, False: 8.77k]
  ------------------
 1156|    460|					proxies = wget_vector_create(8, NULL);
 1157|    460|					wget_vector_set_destructor(proxies, iri_free);
 1158|    460|				}
 1159|  9.23k|				wget_vector_add(proxies, iri);
 1160|  9.23k|			}
 1161|  10.9k|		}
 1162|  11.8k|	}
 1163|       |
 1164|    549|	return proxies;
 1165|  19.7k|}
http.c:iri_free:
 1133|  9.23k|{
 1134|  9.23k|	if (iri)
  ------------------
  |  Branch (1134:6): [True: 9.23k, False: 0]
  ------------------
 1135|  9.23k|		wget_iri_free((wget_iri **) &iri);
 1136|  9.23k|}
http.c:parse_no_proxies:
 1168|  9.69k|{
 1169|  9.69k|	if (!no_proxy)
  ------------------
  |  Branch (1169:6): [True: 9.59k, False: 103]
  ------------------
 1170|  9.59k|		return NULL;
 1171|       |
 1172|    103|	wget_vector *proxies;
 1173|    103|	const char *s, *p;
 1174|       |
 1175|    103|	proxies = wget_vector_create(8, NULL);
 1176|       |
 1177|  1.59k|	for (s = p = no_proxy; *p; s = p + 1) {
  ------------------
  |  Branch (1177:25): [True: 1.49k, False: 103]
  ------------------
 1178|  1.49k|		while (c_isspace(*s) && s < p) s++;
  ------------------
  |  Branch (1178:10): [True: 214, False: 1.27k]
  |  Branch (1178:27): [True: 0, False: 214]
  ------------------
 1179|       |
 1180|  1.49k|		if ((p = strchrnul(s, ',')) != s && p - s < 256) {
  ------------------
  |  Branch (1180:7): [True: 1.05k, False: 433]
  |  Branch (1180:39): [True: 1.04k, False: 12]
  ------------------
 1181|  1.04k|			char *host, *hostp;
 1182|       |
 1183|  1.44k|			while (c_isspace(*s) && s < p) s++;
  ------------------
  |  Branch (1183:11): [True: 399, False: 1.04k]
  |  Branch (1183:28): [True: 399, False: 0]
  ------------------
 1184|       |
 1185|  1.04k|			if (s >= p || !(host = wget_strmemdup(s, p - s)))
  ------------------
  |  Branch (1185:8): [True: 207, False: 838]
  |  Branch (1185:18): [True: 0, False: 838]
  ------------------
 1186|    207|				continue;
 1187|       |
 1188|       |			// May be a hostname, domainname (optional with leading dot or wildcard), IP address.
 1189|       |			// We do not support network address (CIDR) for now.
 1190|       |
 1191|    838|			wget_strtolower(host);
 1192|    838|			if (wget_str_needs_encoding(host)) {
  ------------------
  |  Branch (1192:8): [True: 461, False: 377]
  ------------------
 1193|    461|				if ((hostp = wget_str_to_utf8(host, encoding))) {
  ------------------
  |  Branch (1193:9): [True: 195, False: 266]
  ------------------
 1194|    195|					xfree(host);
  ------------------
  |  |   53|    195|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 195, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1195|    195|					host = hostp;
 1196|    195|				}
 1197|    461|			}
 1198|    838|			if ((hostp = (char *) wget_str_to_ascii(host)) != host) {
  ------------------
  |  Branch (1198:8): [True: 244, False: 594]
  ------------------
 1199|    244|				xfree(host);
  ------------------
  |  |   53|    244|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 244, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1200|    244|				host = hostp;
 1201|    244|			}
 1202|       |
 1203|    838|			wget_vector_add(proxies, host);
 1204|    838|		}
 1205|  1.49k|	}
 1206|       |
 1207|    103|	return proxies;
 1208|  9.69k|}

wget_http_free_param:
 1313|  5.80k|{
 1314|  5.80k|	xfree(param->name);
  ------------------
  |  |   53|  5.80k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 5.80k, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1315|  5.80k|	xfree(param->value);
  ------------------
  |  |   53|  5.80k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 5.80k, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1316|  5.80k|	xfree(param);
  ------------------
  |  |   53|  5.80k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 5.80k, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1317|  5.80k|}
wget_http_free_challenge:
 1344|  4.78k|{
 1345|  4.78k|	xfree(challenge->auth_scheme);
  ------------------
  |  |   53|  4.78k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 4.78k, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1346|  4.78k|	wget_stringmap_free(&challenge->params);
 1347|  4.78k|	xfree(challenge);
  ------------------
  |  |   53|  4.78k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 4.78k, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1348|  4.78k|}

init.c:global_init:
   61|      2|{
   62|      2|	if (!initialized) {
  ------------------
  |  Branch (62:6): [True: 2, False: 0]
  ------------------
   63|      2|		wget_thread_mutex_init(&_mutex);
   64|      2|		initialized = true;
   65|      2|		atexit(global_exit);
   66|      2|	}
   67|      2|}
wget_global_deinit:
  199|  9.59k|{
  200|  9.59k|	int rc = 0;
  201|       |
  202|       |	// we need to lock a static mutex here
  203|       |
  204|  9.59k|	if (global_initialized == 1) {
  ------------------
  |  Branch (204:6): [True: 0, False: 9.59k]
  ------------------
  205|       |		// free resources here
  206|      0|		if (config.cookie_db && config.cookies_enabled && config.cookie_file) {
  ------------------
  |  Branch (206:7): [True: 0, False: 0]
  |  Branch (206:27): [True: 0, False: 0]
  |  Branch (206:53): [True: 0, False: 0]
  ------------------
  207|      0|			wget_cookie_db_save(config.cookie_db, config.cookie_file);
  208|      0|			wget_cookie_db_free(&config.cookie_db);
  209|      0|		}
  210|      0|		wget_tcp_set_bind_address(NULL, NULL);
  211|       |
  212|      0|		wget_dns_cache_free(&dns_cache);
  213|       |
  214|      0|		rc = wget_net_deinit();
  215|      0|		wget_ssl_deinit();
  216|      0|		wget_http_set_http_proxy(NULL, NULL);
  217|      0|		wget_http_set_https_proxy(NULL, NULL);
  218|      0|		wget_http_set_no_proxy(NULL, NULL);
  219|      0|	}
  220|       |
  221|  9.59k|	if (global_initialized > 0) global_initialized--;
  ------------------
  |  Branch (221:6): [True: 0, False: 9.59k]
  ------------------
  222|       |
  223|  9.59k|	global_exit();
  224|       |
  225|       |	// we need to unlock a static mutex here
  226|       |
  227|  9.59k|	if (rc)
  ------------------
  |  Branch (227:6): [True: 0, False: 9.59k]
  ------------------
  228|      0|		wget_error_printf(_("%s: Failed to deinit networking (%d)"), __func__, rc);
  ------------------
  |  |   47|      0|#	define _(STRING) gettext(STRING)
  ------------------
  229|       |
  230|  9.59k|	wget_console_deinit();
  231|  9.59k|}
init.c:global_exit:
   54|  9.59k|{
   55|  9.59k|	if (initialized) {
  ------------------
  |  Branch (55:6): [True: 1, False: 9.59k]
  ------------------
   56|      1|		wget_thread_mutex_destroy(&_mutex);
   57|      1|		initialized = false;
   58|      1|	}
   59|  9.59k|}

wget_getline:
  190|  95.2k|{
  191|  95.2k|	return getline_internal(buf, bufsize, (void *)fp, read_fp);
  192|  95.2k|}
io.c:getline_internal:
   62|  95.2k|{
   63|  95.2k|	ssize_t nbytes = 0;
   64|  95.2k|	size_t *sizep, length = 0;
   65|  95.2k|	char *p;
   66|       |
   67|  95.2k|	if (!buf || !bufsize)
  ------------------
  |  Branch (67:6): [True: 0, False: 95.2k]
  |  Branch (67:14): [True: 0, False: 95.2k]
  ------------------
   68|      0|		return WGET_E_INVALID;
   69|       |
   70|  95.2k|	if (!*buf || !*bufsize) {
  ------------------
  |  Branch (70:6): [True: 21.9k, False: 73.2k]
  |  Branch (70:15): [True: 0, False: 73.2k]
  ------------------
   71|       |		// first call
   72|  21.9k|		if (!(p = wget_malloc(10240)))
  ------------------
  |  Branch (72:7): [True: 0, False: 21.9k]
  ------------------
   73|      0|			return WGET_E_MEMORY;
   74|  21.9k|		*buf = p;
   75|  21.9k|		*bufsize = 10240;
   76|  21.9k|		sizep = (size_t *)(void *)(*buf + *bufsize - 2 * sizeof(size_t));
   77|  21.9k|		sizep[0] = sizep[1] = 0;
   78|  73.2k|	} else {
   79|  73.2k|		sizep = (size_t *)(void *)(*buf + *bufsize - 2 * sizeof(size_t));
   80|  73.2k|		if (sizep[1]) {
  ------------------
  |  Branch (80:7): [True: 67.6k, False: 5.58k]
  ------------------
   81|       |			// take care of remaining data from last call
   82|  67.6k|			if ((p = memchr(*buf + sizep[0], '\n', sizep[1]))) {
  ------------------
  |  Branch (82:8): [True: 54.0k, False: 13.6k]
  ------------------
   83|  54.0k|				*p++ = 0;
   84|  54.0k|				length = p - (*buf + sizep[0]);
   85|  54.0k|				if (sizep[0])
  ------------------
  |  Branch (85:9): [True: 54.0k, False: 0]
  ------------------
   86|  54.0k|					memmove(*buf, *buf + sizep[0], length); // copy line to beginning of buffer
   87|  54.0k|				sizep[0] += length; // position of extra chars
   88|  54.0k|				sizep[1] -= length; // number of extra chars
   89|  54.0k|				return length - 1; // length of line in *buf
   90|  54.0k|			}
   91|       |
   92|  13.6k|			length = sizep[1];
   93|  13.6k|			memmove(*buf, *buf + sizep[0], length + 1);
   94|  13.6k|			sizep[0] = sizep[1] = 0;
   95|  13.6k|		} else
   96|  5.58k|			**buf = 0;
   97|  73.2k|	}
   98|       |
   99|  48.4k|	while ((nbytes = reader(f, *buf + length, *bufsize - 2 * sizeof(size_t) - length - 1)) > 0) {
  ------------------
  |  Branch (99:9): [True: 21.1k, False: 27.3k]
  ------------------
  100|  21.1k|		length += nbytes;
  101|  21.1k|		if ((p = memchr(*buf + length - nbytes, '\n', nbytes))) {
  ------------------
  |  Branch (101:7): [True: 13.9k, False: 7.26k]
  ------------------
  102|  13.9k|			*p++ = 0;
  103|  13.9k|			sizep[0] = p - *buf; // position of extra chars
  104|  13.9k|			sizep[1] = length - sizep[0]; // number of extra chars
  105|  13.9k|			return sizep[0] - 1; // length of line in *buf
  106|  13.9k|		}
  107|       |
  108|  7.26k|		if (length >= *bufsize - 2 * sizeof(size_t) - 1) {
  ------------------
  |  Branch (108:7): [True: 0, False: 7.26k]
  ------------------
  109|      0|			ptrdiff_t off = ((char *)sizep)-*buf;
  110|      0|			size_t *old;
  111|       |
  112|      0|			if (!(p = wget_realloc(*buf, *bufsize = *bufsize * 2)))
  ------------------
  |  Branch (112:8): [True: 0, False: 0]
  ------------------
  113|      0|				return WGET_E_MEMORY;
  114|       |
  115|      0|			*buf = p;
  116|      0|			old = (size_t *)(void *)(*buf + off);
  117|      0|			sizep = (size_t *)(void *)(*buf + *bufsize - 2 * sizeof(size_t));
  118|      0|			sizep[0] = old[0];
  119|      0|			sizep[1] = old[1];
  120|      0|		}
  121|  7.26k|	}
  122|       |
  123|  27.3k|	if (nbytes == -1 && errno != EAGAIN) {
  ------------------
  |  Branch (123:6): [True: 818, False: 26.4k]
  |  Branch (123:22): [True: 818, False: 0]
  ------------------
  124|       |		// socket is broken
  125|    818|		if (errno != EBADF)
  ------------------
  |  Branch (125:7): [True: 818, False: 0]
  ------------------
  126|    818|			error_printf(_("%s: Failed to read, error %d\n"), __func__, errno);
  ------------------
  |  |   66|    818|#define error_printf wget_error_printf
  ------------------
              			error_printf(_("%s: Failed to read, error %d\n"), __func__, errno);
  ------------------
  |  |   47|    818|#	define _(STRING) gettext(STRING)
  ------------------
  127|    818|	}
  128|       |
  129|  27.3k|	if (length) {
  ------------------
  |  Branch (129:6): [True: 20.9k, False: 6.40k]
  ------------------
  130|  20.9k|		if ((*buf)[length - 1] == '\n')
  ------------------
  |  Branch (130:7): [True: 0, False: 20.9k]
  ------------------
  131|      0|			(*buf)[length - 1] = 0;
  132|  20.9k|		else
  133|  20.9k|			(*buf)[length] = 0;
  134|  20.9k|		return length;
  135|  20.9k|	} else
  136|  6.40k|		**buf = 0;
  137|       |
  138|  6.40k|	return -1;
  139|  27.3k|}
io.c:read_fp:
   44|  48.4k|{
   45|  48.4k|	FILE *fp = (FILE *)f;
   46|  48.4k|	ssize_t ret = (ssize_t)fread(dst, 1, len, fp);
   47|  48.4k|	if (ferror(fp))
  ------------------
  |  Branch (47:6): [True: 818, False: 47.6k]
  ------------------
   48|    818|		return -1;
   49|  47.6k|	return ret;
   50|  48.4k|}

wget_ip_is_family:
   51|  22.5k|{
   52|  22.5k|	struct sockaddr_storage dst;
   53|       |
   54|  22.5k|	if (!host)
  ------------------
  |  Branch (54:6): [True: 0, False: 22.5k]
  ------------------
   55|      0|		return false;
   56|       |
   57|  22.5k|	switch (family) {
   58|  11.3k|	case WGET_NET_FAMILY_IPV4:
  ------------------
  |  | 1883|  11.3k|#define WGET_NET_FAMILY_IPV4 1
  ------------------
  |  Branch (58:2): [True: 11.3k, False: 11.1k]
  ------------------
   59|  11.3k|		return inet_pton(AF_INET, host, (struct in_addr *) &dst) == 1;
   60|  11.1k|	case WGET_NET_FAMILY_IPV6:
  ------------------
  |  | 1884|  11.1k|#define WGET_NET_FAMILY_IPV6 2
  ------------------
  |  Branch (60:2): [True: 11.1k, False: 11.3k]
  ------------------
   61|  11.1k|		return inet_pton(AF_INET6, host, (struct in6_addr *) &dst) == 1;
   62|      0|	default:
  ------------------
  |  Branch (62:2): [True: 0, False: 22.5k]
  ------------------
   63|      0|		return false;
   64|  22.5k|	}
   65|  22.5k|}

wget_iri_unescape_inline:
  352|  16.3k|{
  353|  16.3k|	return iri_unescape_inline(src, 0);
  354|  16.3k|}
wget_iri_free_content:
  389|  13.1k|{
  390|  13.1k|	if (iri) {
  ------------------
  |  Branch (390:6): [True: 13.1k, False: 0]
  ------------------
  391|  13.1k|		if (iri->uri_allocated)
  ------------------
  |  Branch (391:7): [True: 0, False: 13.1k]
  ------------------
  392|      0|			xfree(iri->uri);
  ------------------
  |  |   53|      0|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 0, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  393|  13.1k|		if (iri->host_allocated)
  ------------------
  |  Branch (393:7): [True: 2.14k, False: 10.9k]
  ------------------
  394|  2.14k|			xfree(iri->host);
  ------------------
  |  |   53|  2.14k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 2.14k, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  395|  13.1k|		if (iri->path_allocated)
  ------------------
  |  Branch (395:7): [True: 197, False: 12.9k]
  ------------------
  396|    197|			xfree(iri->path);
  ------------------
  |  |   53|    197|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 197, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  397|  13.1k|		if (iri->query_allocated)
  ------------------
  |  Branch (397:7): [True: 195, False: 12.9k]
  ------------------
  398|    195|			xfree(iri->query);
  ------------------
  |  |   53|    195|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 195, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  399|  13.1k|		if (iri->fragment_allocated)
  ------------------
  |  Branch (399:7): [True: 195, False: 12.9k]
  ------------------
  400|    195|			xfree(iri->fragment);
  ------------------
  |  |   53|    195|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 195, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  401|  13.1k|		xfree(iri->connection_part);
  ------------------
  |  |   53|  13.1k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 0, False: 13.1k]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  402|  13.1k|	}
  403|  13.1k|}
wget_iri_free:
  413|  20.5k|{
  414|  20.5k|	if (iri && *iri) {
  ------------------
  |  Branch (414:6): [True: 20.5k, False: 0]
  |  Branch (414:13): [True: 13.1k, False: 7.46k]
  ------------------
  415|  13.1k|		wget_iri_free_content(*iri);
  416|  13.1k|		xfree(*iri);
  ------------------
  |  |   53|  13.1k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 13.1k, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  417|  13.1k|	}
  418|  20.5k|}
wget_iri_parse:
  433|  13.3k|{
  434|  13.3k|	wget_iri *iri;
  435|  13.3k|	char *p, *s, *authority, c;
  436|  13.3k|	size_t slen, extra;
  437|  13.3k|	int have_scheme;
  438|       |
  439|  13.3k|	if (!url)
  ------------------
  |  Branch (439:6): [True: 0, False: 13.3k]
  ------------------
  440|      0|		return NULL;
  441|       |
  442|       |	/*
  443|       |		URI         = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
  444|       |		hier-part   = "//" authority path-abempty / path-absolute / path-rootless / path-empty
  445|       |		scheme      =  ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
  446|       |	 */
  447|  13.8k|	while (c_isspace(*url)) url++;
  ------------------
  |  Branch (447:9): [True: 479, False: 13.3k]
  ------------------
  448|  13.3k|	if (!*url) return NULL;
  ------------------
  |  Branch (448:6): [True: 245, False: 13.1k]
  ------------------
  449|       |/*
  450|       |	// first unescape, than convert to UTF-8
  451|       |	if (strchr(url, '%')) {
  452|       |		char *unesc_url = wget_strdup(url);
  453|       |
  454|       |		wget_percent_unescape(unesc_url);
  455|       |
  456|       |		if (wget_str_needs_encoding(unesc_url)) {
  457|       |			if ((url = wget_str_to_utf8(unesc_url, encoding)))
  458|       |				xfree(unesc_url);
  459|       |			else
  460|       |				url = unesc_url; // on error, use what we have
  461|       |		} else
  462|       |			url = unesc_url;
  463|       |
  464|       |		url_allocated = 1;
  465|       |	} else {
  466|       |		url_allocated = 0;
  467|       |
  468|       |		if (wget_str_needs_encoding(url)) {
  469|       |			if ((s = wget_str_to_utf8(url, encoding))) {
  470|       |				url = s;
  471|       |				url_allocated = 1;
  472|       |			}
  473|       |		}
  474|       |	}
  475|       |*/
  476|       |
  477|  13.1k|	if (c_isalpha(*url)) {
  ------------------
  |  Branch (477:6): [True: 4.91k, False: 8.20k]
  ------------------
  478|  4.91k|		const char *x;
  479|  4.91k|		have_scheme = 1;
  480|       |
  481|  21.9k|		for (x = url; *x && iri_isscheme(*x); x++)
  ------------------
  |  |  121|  20.4k|#define iri_isscheme(c) (c_isalnum(c) || c == '+' || c == '-' || c == '.')
  |  |  ------------------
  |  |  |  Branch (121:26): [True: 14.6k, False: 5.78k]
  |  |  |  Branch (121:42): [True: 206, False: 5.57k]
  |  |  |  Branch (121:54): [True: 1.81k, False: 3.75k]
  |  |  |  Branch (121:66): [True: 379, False: 3.38k]
  |  |  ------------------
  ------------------
  |  Branch (481:17): [True: 20.4k, False: 1.53k]
  ------------------
  482|  17.0k|			;
  483|       |
  484|  4.91k|		if (*x != ':' || c_isdigit(x[1]))
  ------------------
  |  Branch (484:7): [True: 3.79k, False: 1.12k]
  |  Branch (484:20): [True: 297, False: 825]
  ------------------
  485|  4.09k|			have_scheme = 0; // not a scheme
  486|  4.91k|	} else
  487|  8.20k|		have_scheme = 0;
  488|       |
  489|       |	// just use one block of memory for all parsed URI parts
  490|  13.1k|	slen = strlen(url);
  491|  13.1k|	extra = have_scheme ? 0 : sizeof("http://") - 1; // extra space for http://
  ------------------
  |  Branch (491:10): [True: 825, False: 12.2k]
  ------------------
  492|       |
  493|  13.1k|	iri = wget_malloc(sizeof(wget_iri) + (slen + extra + 1) * 2);
  494|  13.1k|	if (!iri)
  ------------------
  |  Branch (494:6): [True: 0, False: 13.1k]
  ------------------
  495|      0|		return NULL;
  496|       |
  497|  13.1k|	memset(iri, 0, sizeof(wget_iri));
  498|       |
  499|  13.1k|	if (have_scheme) {
  ------------------
  |  Branch (499:6): [True: 825, False: 12.2k]
  ------------------
  500|    825|		iri->msize = slen + 1;
  501|    825|		iri->uri = memcpy(iri + 1, url, iri->msize);
  502|    825|		p = s = memcpy((char *)iri->uri + iri->msize, url, iri->msize);
  503|    825|		s = strchr(s, ':'); // we know there is a :
  504|    825|		*s++ = 0;
  505|       |
  506|       |		// p points to scheme
  507|    825|		wget_iri_unescape_inline(p); // percent unescape
  508|    825|		wget_strtolower(p); // convert to lowercase
  509|       |
  510|    825|		bool found = false; // assume the scheme is unsupported
  511|       |
  512|       |		// find the scheme in our static list of supported schemes
  513|       |		// for later comparisons we compare pointers (avoiding strcasecmp())
  514|  1.61k|		for (unsigned it = 0; it < countof(schemes); it++) {
  ------------------
  |  |   56|  1.61k|#define countof(a) (sizeof(a)/sizeof(*(a)))
  ------------------
  |  Branch (514:25): [True: 1.31k, False: 298]
  ------------------
  515|  1.31k|			if (!strcmp(schemes[it].name, p)) {
  ------------------
  |  Branch (515:8): [True: 527, False: 790]
  ------------------
  516|    527|				iri->scheme = it;
  517|    527|				iri->port = schemes[it].port;
  518|    527|				found = true;
  519|    527|				break;
  520|    527|			}
  521|  1.31k|		}
  522|       |
  523|    825|		if (!found) {
  ------------------
  |  Branch (523:7): [True: 298, False: 527]
  ------------------
  524|    298|			debug_printf("Unsupported scheme in '%s'\n", url);
  ------------------
  |  |   68|    298|#define debug_printf wget_debug_printf
  ------------------
  525|    298|			wget_iri_free(&iri);
  526|    298|			return NULL;
  527|    298|		}
  528|  12.2k|	} else {
  529|       |		// add http:// scheme to url
  530|  12.2k|		iri->uri = memcpy(iri + 1, "http://", extra);
  531|  12.2k|		memcpy((char *)iri->uri + extra, url, slen + 1);
  532|  12.2k|		iri->msize = extra + slen + 1;
  533|  12.2k|		s = memcpy((char *)iri->uri + iri->msize, iri->uri, iri->msize);
  534|  12.2k|		s[extra - 3] = 0;
  535|  12.2k|		s += extra;
  536|       |
  537|  12.2k|		iri->scheme = WGET_IRI_SCHEME_HTTP;
  538|  12.2k|		iri->port = schemes[WGET_IRI_SCHEME_HTTP].port;
  539|  12.2k|	}
  540|       |
  541|       |//	if (url_allocated)
  542|       |//		xfree(url);
  543|       |
  544|       |	// this is true for http, https, ftp, file (accept any number of /, like most browsers)
  545|  13.0k|	while (*s == '/')
  ------------------
  |  Branch (545:9): [True: 200, False: 12.8k]
  ------------------
  546|    200|		s++;
  547|       |
  548|       |	// authority
  549|  12.8k|	authority = s;
  550|  64.3k|	while (*s && *s != '/' && *s != '?' && *s != '#')
  ------------------
  |  Branch (550:9): [True: 55.0k, False: 9.28k]
  |  Branch (550:15): [True: 54.1k, False: 911]
  |  Branch (550:28): [True: 53.1k, False: 1.05k]
  |  Branch (550:41): [True: 51.5k, False: 1.57k]
  ------------------
  551|  51.5k|		s++;
  552|  12.8k|	c = *s;
  553|  12.8k|	if (c) *s++ = 0;
  ------------------
  |  Branch (553:6): [True: 3.53k, False: 9.28k]
  ------------------
  554|  12.8k|	wget_iri_unescape_inline(authority);
  555|       |
  556|       |	// left over: [path][?query][#fragment]
  557|  12.8k|	if (c == '/') {
  ------------------
  |  Branch (557:6): [True: 911, False: 11.9k]
  ------------------
  558|    911|		iri->path = s;
  559|  2.02k|		while (*s && *s != '?' && *s != '#')
  ------------------
  |  Branch (559:10): [True: 1.33k, False: 692]
  |  Branch (559:16): [True: 1.12k, False: 211]
  |  Branch (559:29): [True: 1.11k, False: 8]
  ------------------
  560|  1.11k|			s++;
  561|    911|		c = *s;
  562|    911|		if (c) *s++ = 0;
  ------------------
  |  Branch (562:7): [True: 219, False: 692]
  ------------------
  563|    911|		wget_iri_unescape_inline((char *)iri->path);
  564|    911|	}
  565|       |
  566|  12.8k|	if (c == '?') {
  ------------------
  |  Branch (566:6): [True: 1.26k, False: 11.5k]
  ------------------
  567|  1.26k|		iri->query = s;
  568|  2.56k|		while (*s && *s != '#') {
  ------------------
  |  Branch (568:10): [True: 1.50k, False: 1.06k]
  |  Branch (568:16): [True: 1.30k, False: 200]
  ------------------
  569|  1.30k|			if (*s == '+')
  ------------------
  |  Branch (569:8): [True: 194, False: 1.11k]
  ------------------
  570|    194|				*s = ' ';
  571|  1.30k|			s++;
  572|  1.30k|		}
  573|  1.26k|		c = *s;
  574|  1.26k|		if (c) *s++ = 0;
  ------------------
  |  Branch (574:7): [True: 200, False: 1.06k]
  ------------------
  575|       |		/* do not unescape query else we get ambiguity for chars like &, =, +, ... */
  576|  1.26k|	}
  577|       |
  578|  12.8k|	if (c == '#') {
  ------------------
  |  Branch (578:6): [True: 1.78k, False: 11.0k]
  ------------------
  579|  1.78k|		iri->fragment = s;
  580|  1.78k|		s += strlen(s);
  581|  1.78k|		wget_iri_unescape_inline((char *)iri->fragment);
  582|  1.78k|	}
  583|       |
  584|  12.8k|	if (*s) {
  ------------------
  |  Branch (584:6): [True: 0, False: 12.8k]
  ------------------
  585|      0|		debug_printf("unparsed rest '%s'\n", s);
  ------------------
  |  |   68|      0|#define debug_printf wget_debug_printf
  ------------------
  586|      0|	}
  587|       |
  588|  12.8k|	if (*authority) {
  ------------------
  |  Branch (588:6): [True: 11.3k, False: 1.45k]
  ------------------
  589|  11.3k|		s = authority;
  590|  11.3k|		p = strchr(authority, '@');
  591|  11.3k|		if (p) {
  ------------------
  |  Branch (591:7): [True: 705, False: 10.6k]
  ------------------
  592|    705|			iri->userinfo = s;
  593|    705|			*p = 0;
  594|    705|			if ((s = strchr(s, ':'))) {
  ------------------
  |  Branch (594:8): [True: 194, False: 511]
  ------------------
  595|    194|				*s = 0;
  596|    194|				iri->password = s + 1;
  597|    194|			}
  598|    705|			s = p + 1;
  599|    705|		}
  600|  11.3k|		if (*s == '[') {
  ------------------
  |  Branch (600:7): [True: 1.19k, False: 10.1k]
  ------------------
  601|  1.19k|			p = strrchr(s, ']');
  602|  1.19k|			if (p) {
  ------------------
  |  Branch (602:8): [True: 195, False: 999]
  ------------------
  603|    195|				iri->host = s + 1;
  604|    195|				*p = 0;
  605|    195|				s = p + 1;
  606|    999|			} else {
  607|       |				// something is broken
  608|    999|				iri->host = s + 1;
  609|    999|				s += strlen(s);
  610|    999|			}
  611|  10.1k|		} else {
  612|  10.1k|			iri->host = s;
  613|  53.5k|			while (*s && *s != ':')
  ------------------
  |  Branch (613:11): [True: 44.5k, False: 8.97k]
  |  Branch (613:17): [True: 43.3k, False: 1.19k]
  ------------------
  614|  43.3k|				s++;
  615|  10.1k|		}
  616|  11.3k|		if (*s == ':') {
  ------------------
  |  Branch (616:7): [True: 1.19k, False: 10.1k]
  ------------------
  617|  1.19k|			if (c_isdigit(s[1])) {
  ------------------
  |  Branch (617:8): [True: 950, False: 242]
  ------------------
  618|    950|				int port = atoi(s + 1);
  619|    950|				if (port > 0 && port < 65536) {
  ------------------
  |  Branch (619:9): [True: 696, False: 254]
  |  Branch (619:21): [True: 486, False: 210]
  ------------------
  620|    486|					iri->port = (uint16_t) port;
  621|    486|					iri->port_given = true;
  622|    486|				}
  623|    950|			}
  624|  1.19k|		}
  625|  11.3k|		*s = 0;
  626|  11.3k|	}
  627|       |
  628|       |	// now unescape all components (not interested in display, userinfo, password right now)
  629|       |
  630|  12.8k|	if (iri->host) {
  ------------------
  |  Branch (630:6): [True: 11.3k, False: 1.45k]
  ------------------
  631|  11.3k|		wget_strtolower((char *)iri->host);
  632|  11.3k|		if (wget_str_needs_encoding(iri->host)) {
  ------------------
  |  Branch (632:7): [True: 4.58k, False: 6.77k]
  ------------------
  633|  4.58k|			if ((s = wget_str_to_utf8(iri->host, encoding))) {
  ------------------
  |  Branch (633:8): [True: 481, False: 4.10k]
  ------------------
  634|    481|				iri->host = s;
  635|    481|				iri->host_allocated = true;
  636|    481|			}
  637|  4.58k|		}
  638|  11.3k|		if ((p = (char *)wget_str_to_ascii(iri->host)) != iri->host) {
  ------------------
  |  Branch (638:7): [True: 2.14k, False: 9.21k]
  ------------------
  639|  2.14k|			if (iri->host_allocated)
  ------------------
  |  Branch (639:8): [True: 478, False: 1.66k]
  ------------------
  640|    478|				xfree(iri->host);
  ------------------
  |  |   53|    478|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 478, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  641|  2.14k|			iri->host = p;
  642|  2.14k|			iri->host_allocated = true;
  643|  2.14k|		}
  644|       |
  645|       |		// Finally, if the host is a literal IPv4 or IPv6 address, mark it as so
  646|  11.3k|		if (wget_ip_is_family(iri->host, WGET_NET_FAMILY_IPV4) || wget_ip_is_family(iri->host, WGET_NET_FAMILY_IPV6))
  ------------------
  |  | 1883|  11.3k|#define WGET_NET_FAMILY_IPV4 1
  ------------------
              		if (wget_ip_is_family(iri->host, WGET_NET_FAMILY_IPV4) || wget_ip_is_family(iri->host, WGET_NET_FAMILY_IPV6))
  ------------------
  |  | 1884|  11.1k|#define WGET_NET_FAMILY_IPV6 2
  ------------------
  |  Branch (646:7): [True: 195, False: 11.1k]
  |  Branch (646:61): [True: 194, False: 10.9k]
  ------------------
  647|    389|			iri->is_ip_address = true;
  648|  11.3k|	}
  649|       |
  650|  12.8k|	if (!iri->host) {
  ------------------
  |  Branch (650:6): [True: 1.45k, False: 11.3k]
  ------------------
  651|  1.45k|		error_printf(_("Missing host/domain in URI '%s'\n"), iri->uri);
  ------------------
  |  |   66|  1.45k|#define error_printf wget_error_printf
  ------------------
              		error_printf(_("Missing host/domain in URI '%s'\n"), iri->uri);
  ------------------
  |  |   47|  1.45k|#	define _(STRING) gettext(STRING)
  ------------------
  652|  1.45k|		wget_iri_free(&iri);
  653|  1.45k|		return NULL;
  654|  1.45k|	}
  655|       |
  656|  11.3k|	if (iri->path && wget_str_needs_encoding(iri->path)) {
  ------------------
  |  Branch (656:6): [True: 911, False: 10.4k]
  |  Branch (656:19): [True: 405, False: 506]
  ------------------
  657|    405|		if ((s = wget_str_to_utf8(iri->path, encoding))) {
  ------------------
  |  Branch (657:7): [True: 197, False: 208]
  ------------------
  658|    197|			iri->path = s;
  659|    197|			iri->path_allocated = true;
  660|    197|		}
  661|    405|	}
  662|       |
  663|  11.3k|	if (iri->query && wget_str_needs_encoding(iri->query)) {
  ------------------
  |  Branch (663:6): [True: 830, False: 10.5k]
  |  Branch (663:20): [True: 407, False: 423]
  ------------------
  664|    407|		if ((s = wget_str_to_utf8(iri->query, encoding))) {
  ------------------
  |  Branch (664:7): [True: 195, False: 212]
  ------------------
  665|    195|			iri->query = s;
  666|    195|			iri->query_allocated = true;
  667|    195|		}
  668|    407|	}
  669|       |
  670|  11.3k|	if (iri->fragment && wget_str_needs_encoding(iri->fragment)) {
  ------------------
  |  Branch (670:6): [True: 1.09k, False: 10.2k]
  |  Branch (670:23): [True: 879, False: 211]
  ------------------
  671|    879|		if ((s = wget_str_to_utf8(iri->fragment, encoding))) {
  ------------------
  |  Branch (671:7): [True: 195, False: 684]
  ------------------
  672|    195|			iri->fragment = s;
  673|    195|			iri->fragment_allocated = true;
  674|    195|		}
  675|    879|	}
  676|       |
  677|       |/*
  678|       |	debug_printf("scheme=%s\n",iri->scheme);
  679|       |	debug_printf("host=%s\n",iri->host);
  680|       |	debug_printf("path=%s\n",iri->path);
  681|       |	debug_printf("query=%s\n",iri->query);
  682|       |	debug_printf("fragment=%s\n",iri->fragment);
  683|       |*/
  684|       |
  685|  11.3k|	return iri;
  686|  12.8k|}
wget_iri_set_defaultpage:
 1387|  9.50k|{
 1388|  9.50k|	default_page = page;
 1389|  9.50k|	default_page_length = default_page ? strlen(default_page) : 0;
  ------------------
  |  Branch (1389:24): [True: 1, False: 9.49k]
  ------------------
 1390|  9.50k|}
wget_iri_set_defaultport:
 1400|  19.1k|{
 1401|  19.1k|	if ((unsigned) scheme < countof(schemes)) {
  ------------------
  |  |   56|  19.1k|#define countof(a) (sizeof(a)/sizeof(*(a)))
  ------------------
  |  Branch (1401:6): [True: 19.1k, False: 0]
  ------------------
 1402|  19.1k|		schemes[scheme].port = port;
 1403|  19.1k|		return 0;
 1404|  19.1k|	}
 1405|       |
 1406|      0|	return -1;
 1407|  19.1k|}
iri.c:iri_unescape_inline:
  278|  16.3k|{
  279|  16.3k|	char *ret = NULL;
  280|  16.3k|	unsigned char *s = (unsigned char *)src; // just a helper to avoid casting a lot
  281|  16.3k|	unsigned char *d = s;
  282|       |
  283|  77.3k|	while (*s) {
  ------------------
  |  Branch (283:9): [True: 61.0k, False: 16.3k]
  ------------------
  284|  61.0k|		if (*s == '%') {
  ------------------
  |  Branch (284:7): [True: 1.14k, False: 59.8k]
  ------------------
  285|  1.14k|			if (c_isxdigit(s[1]) && c_isxdigit(s[2])) {
  ------------------
  |  Branch (285:8): [True: 884, False: 265]
  |  Branch (285:28): [True: 674, False: 210]
  ------------------
  286|    674|				unsigned char c = (unsigned char) (unhex(s[1]) << 4) | unhex(s[2]);
  287|    674|				if (!ctype || (!(iri_ctype[(unsigned char)(c)] & ctype) && c != '%')) {
  ------------------
  |  Branch (287:9): [True: 674, False: 0]
  |  Branch (287:20): [True: 0, False: 0]
  |  Branch (287:64): [True: 0, False: 0]
  ------------------
  288|    674|					*d++ = c;
  289|    674|					s += 3;
  290|    674|					ret = src;
  291|    674|					continue;
  292|    674|				}
  293|    674|			}
  294|  59.8k|		} else if (*s == '#') {
  ------------------
  |  Branch (294:14): [True: 1.79k, False: 58.0k]
  ------------------
  295|  1.79k|			uint32_t value = 0;
  296|       |
  297|  1.79k|			if (s[1] == 'x') {
  ------------------
  |  Branch (297:8): [True: 886, False: 907]
  ------------------
  298|    886|				unsigned char *p = s + 2;
  299|  2.40k|				while (c_isxdigit(*p)) {
  ------------------
  |  Branch (299:12): [True: 1.51k, False: 886]
  ------------------
  300|  1.51k|					value = ((value & 0x0FFFFFFF) << 4) | unhex(*p);
  301|  1.51k|					p++;
  302|  1.51k|				}
  303|    886|				if (*p == ';') {
  ------------------
  |  Branch (303:9): [True: 642, False: 244]
  ------------------
  304|    642|					if (value > 0 && value < 128) {
  ------------------
  |  Branch (304:10): [True: 448, False: 194]
  |  Branch (304:23): [True: 202, False: 246]
  ------------------
  305|    202|						*d++ = (unsigned char) value;
  306|    202|						s = p + 1;
  307|    202|						continue;
  308|    202|					}
  309|       |					// else: we have to convert the unicode value to whatever encoding the URL is in (likely UTF-8)
  310|       |					// this cannot be done inline since the URL's length may increase
  311|    642|				}
  312|    907|			} else {
  313|    907|				unsigned char *p = s + 1;
  314|  2.15k|				while (c_isdigit(*p) && value <= 0x10FFFF) { // max. Unicode value
  ------------------
  |  Branch (314:12): [True: 1.25k, False: 905]
  |  Branch (314:29): [True: 1.24k, False: 2]
  ------------------
  315|  1.24k|					value = value * 10 + (*p - '0');
  316|  1.24k|					p++;
  317|  1.24k|				}
  318|    907|				if (*p == ';') {
  ------------------
  |  Branch (318:9): [True: 611, False: 296]
  ------------------
  319|    611|					if (value > 0 && value < 128) {
  ------------------
  |  Branch (319:10): [True: 414, False: 197]
  |  Branch (319:23): [True: 203, False: 211]
  ------------------
  320|    203|						*d++ = (unsigned char) value;
  321|    203|						s = p + 1;
  322|    203|						continue;
  323|    203|					}
  324|       |					// else: we have to convert the unicode value to whatever encoding the URL is in (likely UTF-8)
  325|       |					// this cannot be done inline since the URL's length may increase
  326|    611|				}
  327|    907|			}
  328|  58.0k|		} else if (*s == '\r' || *s == '\n') {
  ------------------
  |  Branch (328:14): [True: 389, False: 57.6k]
  |  Branch (328:28): [True: 0, False: 57.6k]
  ------------------
  329|       |			// Ignore / remove CR and LF from URLs. See https://gitlab.com/gnuwget/wget2/-/issues/522
  330|    389|			s++;
  331|    389|			continue;
  332|    389|		}
  333|       |
  334|  59.5k|		*d++ = *s++;
  335|  59.5k|	}
  336|  16.3k|	*d = 0;
  337|       |
  338|  16.3k|	return ret;
  339|  16.3k|}
iri.c:unhex:
  273|  2.86k|{
  274|  2.86k|	return c <= '9' ? c - '0' : (c <= 'F' ? c - 'A' + 10 : c - 'a' + 10);
  ------------------
  |  Branch (274:9): [True: 852, False: 2.01k]
  |  Branch (274:31): [True: 960, False: 1.05k]
  ------------------
  275|  2.86k|}

wget_info_printf:
   53|    210|{
   54|    210|	if (info_logger.vprintf) {
  ------------------
  |  Branch (54:6): [True: 0, False: 210]
  ------------------
   55|      0|		va_list args;
   56|       |
   57|      0|		va_start(args, fmt);
   58|      0|		info_logger.vprintf(&info_logger, fmt, args);
   59|      0|		va_end(args);
   60|      0|	}
   61|    210|}
wget_error_printf:
   70|  46.1k|{
   71|  46.1k|	if (error_logger.vprintf) {
  ------------------
  |  Branch (71:6): [True: 0, False: 46.1k]
  ------------------
   72|      0|		va_list args;
   73|       |
   74|      0|		va_start(args, fmt);
   75|      0|		error_logger.vprintf(&error_logger, fmt, args);
   76|      0|		va_end(args);
   77|      0|	}
   78|  46.1k|}
wget_debug_printf:
  100|   226k|{
  101|   226k|	if (debug_logger.vprintf) {
  ------------------
  |  Branch (101:6): [True: 0, False: 226k]
  ------------------
  102|      0|		va_list args;
  103|       |
  104|      0|		va_start(args, fmt);
  105|      0|		debug_logger.vprintf(&debug_logger, fmt, args);
  106|      0|		va_end(args);
  107|      0|	}
  108|   226k|}

wget_memdup:
   55|  58.4k|{
   56|  58.4k|	if (!m) return NULL;
  ------------------
  |  Branch (56:6): [True: 0, False: 58.4k]
  ------------------
   57|       |
   58|  58.4k|	void *d = wget_malloc(n);
   59|  58.4k|	if (!d)
  ------------------
  |  Branch (59:6): [True: 0, False: 58.4k]
  ------------------
   60|      0|		return NULL;
   61|       |
   62|  58.4k|	return memcpy(d, m, n);
   63|  58.4k|}
wget_strdup:
   75|   175k|{
   76|   175k|	return s ? wget_memdup(s, strlen(s) + 1) : NULL;
  ------------------
  |  Branch (76:9): [True: 58.4k, False: 117k]
  ------------------
   77|   175k|}
wget_strmemdup:
   90|  33.8k|{
   91|  33.8k|	if (!m)
  ------------------
  |  Branch (91:6): [True: 0, False: 33.8k]
  ------------------
   92|      0|		return NULL;
   93|       |
   94|  33.8k|	void *d = wget_malloc(n + 1);
   95|  33.8k|	if (!d)
  ------------------
  |  Branch (95:6): [True: 0, False: 33.8k]
  ------------------
   96|      0|		return NULL;
   97|       |
   98|  33.8k|	char *ret = memcpy(d, m, n);
   99|  33.8k|	ret[n] = 0;
  100|       |
  101|  33.8k|	return ret;
  102|  33.8k|}
wget_strmemcpy:
  115|  10.9k|{
  116|  10.9k|	if (!s || !ssize)
  ------------------
  |  Branch (116:6): [True: 0, False: 10.9k]
  |  Branch (116:12): [True: 0, False: 10.9k]
  ------------------
  117|      0|		return 0;
  118|       |
  119|  10.9k|	if (likely(n > 0)) {
  ------------------
  |  |  117|  10.9k|#	define likely(expr) __builtin_expect(!!(expr), 1)
  |  |  ------------------
  |  |  |  Branch (117:23): [True: 10.9k, False: 0]
  |  |  ------------------
  ------------------
  120|  10.9k|		if (n >= ssize)
  ------------------
  |  Branch (120:7): [True: 0, False: 10.9k]
  ------------------
  121|      0|			n = ssize - 1; // truncate
  122|       |
  123|  10.9k|		if (m)
  ------------------
  |  Branch (123:7): [True: 10.9k, False: 0]
  ------------------
  124|  10.9k|			memmove(s, m, n);
  125|      0|		else
  126|      0|			n = 0;
  127|  10.9k|	}
  128|  10.9k|	s[n] = 0;
  129|       |
  130|  10.9k|	return n;
  131|  10.9k|}
wget_strmemcpy_a:
  147|  9.59k|{
  148|  9.59k|	if (n >= ssize) {
  ------------------
  |  Branch (148:6): [True: 0, False: 9.59k]
  ------------------
  149|      0|		if (!(s = wget_malloc(n + 1)))
  ------------------
  |  Branch (149:7): [True: 0, False: 0]
  ------------------
  150|      0|			return NULL;
  151|      0|	}
  152|       |
  153|  9.59k|	memmove(s, m, n);
  154|  9.59k|	s[n] = 0;
  155|  9.59k|	return s;
  156|  9.59k|}

wget_net_init:
  150|  9.50k|{
  151|  9.50k|	int rc = gl_sockets_startup(SOCKETS_2_2);
  ------------------
  |  |   32|  9.50k|#define SOCKETS_2_2 0x0202
  ------------------
  152|       |
  153|  9.50k|	return rc ? -1 : 0;
  ------------------
  |  Branch (153:9): [True: 0, False: 9.50k]
  ------------------
  154|  9.50k|}
wget_tcp_set_dns:
  202|  9.50k|{
  203|  9.50k|	(tcp ? tcp : &global_tcp)->dns = dns;
  ------------------
  |  Branch (203:3): [True: 0, False: 9.50k]
  ------------------
  204|  9.50k|}
wget_tcp_set_tcp_fastopen:
  217|  9.50k|{
  218|  9.50k|#if defined TCP_FASTOPEN_OSX || defined TCP_FASTOPEN_LINUX || defined TCP_FASTOPEN_LINUX_411
  219|  9.50k|	(tcp ? tcp : &global_tcp)->tcp_fastopen = tcp_fastopen;
  ------------------
  |  Branch (219:3): [True: 0, False: 9.50k]
  ------------------
  220|       |#else
  221|       |	(void) tcp; (void) tcp_fastopen;
  222|       |#endif
  223|  9.50k|}
wget_tcp_set_tls_false_start:
  247|  9.50k|{
  248|  9.50k|	(tcp ? tcp : &global_tcp)->tls_false_start = false_start;
  ------------------
  |  Branch (248:3): [True: 0, False: 9.50k]
  ------------------
  249|  9.50k|}
wget_tcp_set_preferred_family:
  300|  7.64k|{
  301|  7.64k|	(tcp ? tcp : &global_tcp)->preferred_family = value_to_family(family);
  ------------------
  |  Branch (301:3): [True: 0, False: 7.64k]
  ------------------
  302|  7.64k|}
wget_tcp_set_family:
  326|  1.85k|{
  327|  1.85k|	(tcp ? tcp : &global_tcp)->family = value_to_family(family);
  ------------------
  |  Branch (327:3): [True: 0, False: 1.85k]
  ------------------
  328|  1.85k|}
wget_tcp_set_connect_timeout:
  381|  9.50k|{
  382|  9.50k|	(tcp ? tcp : &global_tcp)->connect_timeout = timeout;
  ------------------
  |  Branch (382:3): [True: 0, False: 9.50k]
  ------------------
  383|  9.50k|}
wget_tcp_set_timeout:
  397|  9.50k|{
  398|  9.50k|	(tcp ? tcp : &global_tcp)->timeout = timeout;
  ------------------
  |  Branch (398:3): [True: 0, False: 9.50k]
  ------------------
  399|  9.50k|}
wget_tcp_set_bind_interface:
  474|      1|{
  475|      1|	if (!tcp)
  ------------------
  |  Branch (475:6): [True: 1, False: 0]
  ------------------
  476|      1|		tcp = &global_tcp;
  477|       |
  478|      1|	tcp->bind_interface = bind_interface;
  479|      1|}
net.c:value_to_family:
  169|  9.50k|{
  170|  9.50k|	switch (value) {
  171|  3.91k|	case WGET_NET_FAMILY_IPV4:
  ------------------
  |  | 1883|  3.91k|#define WGET_NET_FAMILY_IPV4 1
  ------------------
  |  Branch (171:2): [True: 3.91k, False: 5.59k]
  ------------------
  172|  3.91k|		return AF_INET;
  173|  2.60k|	case WGET_NET_FAMILY_IPV6:
  ------------------
  |  | 1884|  2.60k|#define WGET_NET_FAMILY_IPV6 2
  ------------------
  |  Branch (173:2): [True: 2.60k, False: 6.89k]
  ------------------
  174|  2.60k|		return AF_INET6;
  175|  2.98k|	default:
  ------------------
  |  Branch (175:2): [True: 2.98k, False: 6.51k]
  ------------------
  176|  2.98k|		return AF_UNSPEC;
  177|  9.50k|	}
  178|  9.50k|}

wget_netrc_db_deinit:
  144|  9.59k|{
  145|  9.59k|	if (netrc_db) {
  ------------------
  |  Branch (145:6): [True: 0, False: 9.59k]
  ------------------
  146|      0|		wget_hashmap_free(&netrc_db->machines);
  147|      0|	}
  148|  9.59k|}
wget_netrc_db_free:
  151|  9.59k|{
  152|  9.59k|	if (netrc_db) {
  ------------------
  |  Branch (152:6): [True: 9.59k, False: 0]
  ------------------
  153|  9.59k|		wget_netrc_db_deinit(*netrc_db);
  154|  9.59k|		xfree(*netrc_db);
  ------------------
  |  |   53|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 0, False: 9.59k]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  155|  9.59k|	}
  156|  9.59k|}

wget_ocsp_db_free:
  258|  9.59k|{
  259|  9.59k|	if (plugin_vtable) {
  ------------------
  |  Branch (259:6): [True: 0, False: 9.59k]
  ------------------
  260|      0|		plugin_vtable->free(ocsp_db);
  261|      0|		return;
  262|      0|	}
  263|       |
  264|  9.59k|	if (ocsp_db && *ocsp_db) {
  ------------------
  |  Branch (264:6): [True: 9.59k, False: 0]
  |  Branch (264:17): [True: 0, False: 9.59k]
  ------------------
  265|      0|		wget_ocsp_db_deinit(*ocsp_db);
  266|      0|		xfree(*ocsp_db);
  ------------------
  |  |   53|      0|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 0, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  267|      0|	}
  268|  9.59k|}

wget_vasprintf:
   52|  64.2k|{
   53|  64.2k|	wget_buffer buf;
   54|       |
   55|  64.2k|	wget_buffer_init(&buf, NULL, 128);
   56|       |
   57|  64.2k|	size_t len = wget_buffer_vprintf(&buf, fmt, args);
   58|       |
   59|  64.2k|	if (unlikely(buf.error)) {
  ------------------
  |  |  116|  64.2k|#	define unlikely(expr) __builtin_expect(!!(expr), 0)
  |  |  ------------------
  |  |  |  Branch (116:25): [True: 0, False: 64.2k]
  |  |  ------------------
  ------------------
   60|      0|		xfree(buf.data);
  ------------------
  |  |   53|      0|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 0, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
   61|      0|		return (size_t) -1;
   62|      0|	}
   63|       |
   64|  64.2k|	if (strp) {
  ------------------
  |  Branch (64:6): [True: 64.2k, False: 0]
  ------------------
   65|       |		// shrink memory to real usage
   66|  64.2k|		*strp = wget_realloc(buf.data, len + 1);
   67|  64.2k|	} else {
   68|       |		// behave like C99/POSIX snprintf - just return the length
   69|      0|		xfree(buf.data);
  ------------------
  |  |   53|      0|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 0, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
   70|      0|	}
   71|       |
   72|  64.2k|	return len;
   73|  64.2k|}
wget_vaprintf:
  104|    125|{
  105|    125|	char *s = NULL;
  106|       |
  107|    125|	wget_vasprintf(&s, fmt, args);
  108|       |
  109|    125|	return s;
  110|    125|}
wget_aprintf:
  121|  64.0k|{
  122|  64.0k|	va_list args;
  123|  64.0k|	char *s = NULL;
  124|       |
  125|  64.0k|	va_start(args, fmt);
  126|  64.0k|	wget_vasprintf(&s, fmt, args);
  127|  64.0k|	va_end(args);
  128|       |
  129|  64.0k|	return s;
  130|  64.0k|}

random.c:random_init:
   65|      2|{
   66|      2|	if (!initialized) {
  ------------------
  |  Branch (66:6): [True: 2, False: 0]
  ------------------
   67|      2|		wget_thread_mutex_init(&mutex);
   68|      2|		initialized = true;
   69|      2|		atexit(random_exit);
   70|      2|	}
   71|      2|}

wget_ssl_default_cert_dir:
   30|      2|{
   31|      2|	return "/etc/ssl/certs";
   32|      2|}
wget_ssl_default_ca_bundle_path:
   35|      2|{
   36|      2|	return NULL;
   37|      2|}

wget_ssl_set_config_string:
  208|  66.5k|{
  209|  66.5k|	switch (key) {
  210|  9.50k|	case WGET_SSL_SECURE_PROTOCOL: config.secure_protocol = value; break;
  ------------------
  |  | 1978|  9.50k|#define WGET_SSL_SECURE_PROTOCOL   1
  ------------------
  |  Branch (210:2): [True: 9.50k, False: 57.0k]
  ------------------
  211|  9.50k|	case WGET_SSL_CA_DIRECTORY: config.ca_directory = value; break;
  ------------------
  |  | 1979|  9.50k|#define WGET_SSL_CA_DIRECTORY      2
  ------------------
  |  Branch (211:2): [True: 9.50k, False: 57.0k]
  ------------------
  212|  9.50k|	case WGET_SSL_CA_FILE: config.ca_file = value; break;
  ------------------
  |  | 1980|  9.50k|#define WGET_SSL_CA_FILE           3
  ------------------
  |  Branch (212:2): [True: 9.50k, False: 57.0k]
  ------------------
  213|  9.50k|	case WGET_SSL_CERT_FILE: config.cert_file = value; break;
  ------------------
  |  | 1981|  9.50k|#define WGET_SSL_CERT_FILE         4
  ------------------
  |  Branch (213:2): [True: 9.50k, False: 57.0k]
  ------------------
  214|  9.50k|	case WGET_SSL_KEY_FILE: config.key_file = value; break;
  ------------------
  |  | 1982|  9.50k|#define WGET_SSL_KEY_FILE          5
  ------------------
  |  Branch (214:2): [True: 9.50k, False: 57.0k]
  ------------------
  215|  9.50k|	case WGET_SSL_CRL_FILE: config.crl_file = value; break;
  ------------------
  |  | 1989|  9.50k|#define WGET_SSL_CRL_FILE          13
  ------------------
  |  Branch (215:2): [True: 9.50k, False: 57.0k]
  ------------------
  216|  9.50k|	case WGET_SSL_OCSP_SERVER: config.ocsp_server = value; break;
  ------------------
  |  | 1991|  9.50k|#define WGET_SSL_OCSP_SERVER       15
  ------------------
  |  Branch (216:2): [True: 9.50k, False: 57.0k]
  ------------------
  217|      0|	case WGET_SSL_ALPN: config.alpn = value; break;
  ------------------
  |  | 1994|      0|#define WGET_SSL_ALPN              18
  ------------------
  |  Branch (217:2): [True: 0, False: 66.5k]
  ------------------
  218|      0|	default: error_printf(_("Unknown config key %d (or value must not be a string)\n"), key);
  ------------------
  |  |   66|      0|#define error_printf wget_error_printf
  ------------------
              	default: error_printf(_("Unknown config key %d (or value must not be a string)\n"), key);
  ------------------
  |  |   47|      0|#	define _(STRING) gettext(STRING)
  ------------------
  |  Branch (218:2): [True: 0, False: 66.5k]
  ------------------
  219|  66.5k|	}
  220|  66.5k|}
wget_ssl_set_config_object:
  247|  28.5k|{
  248|  28.5k|	switch (key) {
  249|  9.50k|	case WGET_SSL_OCSP_CACHE: config.ocsp_cert_cache = (wget_ocsp_db *)value; break;
  ------------------
  |  | 1993|  9.50k|#define WGET_SSL_OCSP_CACHE        17
  ------------------
  |  Branch (249:2): [True: 9.50k, False: 19.0k]
  ------------------
  250|  9.50k|	case WGET_SSL_SESSION_CACHE: config.tls_session_cache = (wget_tls_session_db *)value; break;
  ------------------
  |  | 1995|  9.50k|#define WGET_SSL_SESSION_CACHE     19
  ------------------
  |  Branch (250:2): [True: 9.50k, False: 19.0k]
  ------------------
  251|  9.50k|	case WGET_SSL_HPKP_CACHE: config.hpkp_cache = (wget_hpkp_db *)value; break;
  ------------------
  |  | 1996|  9.50k|#define WGET_SSL_HPKP_CACHE        20
  ------------------
  |  Branch (251:2): [True: 9.50k, False: 19.0k]
  ------------------
  252|      0|	default: error_printf(_("Unknown config key %d (or value must not be an object)\n"), key);
  ------------------
  |  |   66|      0|#define error_printf wget_error_printf
  ------------------
              	default: error_printf(_("Unknown config key %d (or value must not be an object)\n"), key);
  ------------------
  |  |   47|      0|#	define _(STRING) gettext(STRING)
  ------------------
  |  Branch (252:2): [True: 0, False: 28.5k]
  ------------------
  253|  28.5k|	}
  254|  28.5k|}
wget_ssl_set_config_int:
  294|  95.0k|{
  295|  95.0k|	switch (key) {
  296|  9.50k|	case WGET_SSL_CHECK_CERTIFICATE: config.check_certificate = (char)value; break;
  ------------------
  |  | 1986|  9.50k|#define WGET_SSL_CHECK_CERTIFICATE 9
  ------------------
  |  Branch (296:2): [True: 9.50k, False: 85.5k]
  ------------------
  297|  9.50k|	case WGET_SSL_REPORT_INVALID_CERT: config.report_invalid_cert = (char)value; break;
  ------------------
  |  | 1999|  9.50k|#define WGET_SSL_REPORT_INVALID_CERT 23
  ------------------
  |  Branch (297:2): [True: 9.50k, False: 85.5k]
  ------------------
  298|  9.50k|	case WGET_SSL_CHECK_HOSTNAME: config.check_hostname = (char)value; break;
  ------------------
  |  | 1987|  9.50k|#define WGET_SSL_CHECK_HOSTNAME    10
  ------------------
  |  Branch (298:2): [True: 9.50k, False: 85.5k]
  ------------------
  299|      0|	case WGET_SSL_CA_TYPE: config.ca_type = (char)value; break;
  ------------------
  |  | 1983|      0|#define WGET_SSL_CA_TYPE           6
  ------------------
  |  Branch (299:2): [True: 0, False: 95.0k]
  ------------------
  300|  9.50k|	case WGET_SSL_CERT_TYPE: config.cert_type = (char)value; break;
  ------------------
  |  | 1984|  9.50k|#define WGET_SSL_CERT_TYPE         7
  ------------------
  |  Branch (300:2): [True: 9.50k, False: 85.5k]
  ------------------
  301|      0|	case WGET_SSL_DANE: config.dane = (char)value; break;
  ------------------
  |  | 2000|      0|#define WGET_SSL_DANE              24
  ------------------
  |  Branch (301:2): [True: 0, False: 95.0k]
  ------------------
  302|  9.50k|	case WGET_SSL_KEY_TYPE: config.key_type = (char)value; break;
  ------------------
  |  | 1985|  9.50k|#define WGET_SSL_KEY_TYPE          8
  ------------------
  |  Branch (302:2): [True: 9.50k, False: 85.5k]
  ------------------
  303|  9.50k|	case WGET_SSL_PRINT_INFO: config.print_info = (char)value; break;
  ------------------
  |  | 1988|  9.50k|#define WGET_SSL_PRINT_INFO        11
  ------------------
  |  Branch (303:2): [True: 9.50k, False: 85.5k]
  ------------------
  304|  9.50k|	case WGET_SSL_OCSP: config.ocsp = (char)value; break;
  ------------------
  |  | 1992|  9.50k|#define WGET_SSL_OCSP              16
  ------------------
  |  Branch (304:2): [True: 9.50k, False: 85.5k]
  ------------------
  305|  9.50k|	case WGET_SSL_OCSP_DATE: config.ocsp_date = (char)value; break;
  ------------------
  |  | 1998|  9.50k|#define WGET_SSL_OCSP_DATE         22
  ------------------
  |  Branch (305:2): [True: 9.50k, False: 85.5k]
  ------------------
  306|  9.50k|	case WGET_SSL_OCSP_STAPLING: config.ocsp_stapling = (char)value; break;
  ------------------
  |  | 1990|  9.50k|#define WGET_SSL_OCSP_STAPLING     14
  ------------------
  |  Branch (306:2): [True: 9.50k, False: 85.5k]
  ------------------
  307|  9.50k|	case WGET_SSL_OCSP_NONCE: config.ocsp_nonce = value; break;
  ------------------
  |  | 1997|  9.50k|#define WGET_SSL_OCSP_NONCE        21
  ------------------
  |  Branch (307:2): [True: 9.50k, False: 85.5k]
  ------------------
  308|      0|	default: error_printf(_("Unknown config key %d (or value must not be an integer)\n"), key);
  ------------------
  |  |   66|      0|#define error_printf wget_error_printf
  ------------------
              	default: error_printf(_("Unknown config key %d (or value must not be an integer)\n"), key);
  ------------------
  |  |   47|      0|#	define _(STRING) gettext(STRING)
  ------------------
  |  Branch (308:2): [True: 0, False: 95.0k]
  ------------------
  309|  95.0k|	}
  310|  95.0k|}
ssl_gnutls.c:tls_init:
 1257|      2|{
 1258|      2|	if (!mutex) {
  ------------------
  |  Branch (1258:6): [True: 2, False: 0]
  ------------------
 1259|      2|		wget_thread_mutex_init(&mutex);
 1260|       |
 1261|       |		// Initialize paths while in a thread-safe environment (mostly for _WIN32).
 1262|      2|		wget_ssl_default_cert_dir();
 1263|      2|		wget_ssl_default_ca_bundle_path();
 1264|       |
 1265|      2|		atexit(tls_exit);
 1266|      2|	}
 1267|      2|}
wget_ssl_set_stats_callback_tls:
 2078|     30|{
 2079|     30|	tls_stats_callback = fn;
 2080|     30|	tls_stats_ctx = ctx;
 2081|     30|}
wget_ssl_set_stats_callback_ocsp:
 2090|      7|{
 2091|      7|	ocsp_stats_callback = fn;
 2092|      7|	ocsp_stats_ctx = ctx;
 2093|      7|}

wget_stringmap_create:
   96|  9.59k|{
   97|  9.59k|	return wget_hashmap_create(max, hash_string, (wget_hashmap_compare_fn *) wget_strcmp);
   98|  9.59k|}
stringmap.c:hash_string:
   47|     50|{
   48|     50|	const char *k = key;
   49|     50|	unsigned int hash = 0; // use 0 as SALT if hash table attacks doesn't matter
   50|       |
   51|    294|	while (*k)
  ------------------
  |  Branch (51:9): [True: 244, False: 50]
  ------------------
   52|    244|		hash = hash * 101 + (unsigned char)*k++;
   53|       |
   54|     50|	return hash;
   55|     50|}

wget_thread_mutex_init:
   84|  11.1k|{
   85|  11.1k|	*mutex = wget_malloc(sizeof(struct wget_thread_mutex_st));
   86|       |
   87|  11.1k|	if (!*mutex)
  ------------------
  |  Branch (87:6): [True: 0, False: 11.1k]
  ------------------
   88|      0|		return WGET_E_MEMORY;
   89|       |
   90|  11.1k|	return glthread_lock_init(&((*mutex)->mutex));
  ------------------
  |  |  309|  11.1k|    (pthread_in_use () ? pthread_mutex_init (LOCK, NULL) : 0)
  |  |  ------------------
  |  |  |  |  179|  11.1k|      (pthread_mutexattr_gettype != NULL || c11_threads_in_use ())
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      0|#  define c11_threads_in_use() (thrd_exit != NULL)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (87:32): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (179:8): [True: 11.1k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   91|  11.1k|}
wget_thread_mutex_destroy:
  102|  11.1k|{
  103|  11.1k|	int rc = glthread_lock_destroy(&(*mutex)->mutex);
  ------------------
  |  |  315|  11.1k|    (pthread_in_use () ? pthread_mutex_destroy (LOCK) : 0)
  |  |  ------------------
  |  |  |  |  179|  11.1k|      (pthread_mutexattr_gettype != NULL || c11_threads_in_use ())
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      0|#  define c11_threads_in_use() (thrd_exit != NULL)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (87:32): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (179:8): [True: 11.1k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  104|  11.1k|	xfree(*mutex);
  ------------------
  |  |   53|  11.1k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 11.1k, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  105|  11.1k|	return rc;
  106|  11.1k|}
wget_thread_mutex_lock:
  116|  1.59k|{
  117|  1.59k|	glthread_lock_lock(&mutex->mutex);
  ------------------
  |  |  311|  1.59k|    (pthread_in_use () ? pthread_mutex_lock (LOCK) : 0)
  |  |  ------------------
  |  |  |  |  179|  1.59k|      (pthread_mutexattr_gettype != NULL || c11_threads_in_use ())
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      0|#  define c11_threads_in_use() (thrd_exit != NULL)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (87:32): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (179:8): [True: 1.59k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  118|  1.59k|}
wget_thread_mutex_unlock:
  126|  1.59k|{
  127|  1.59k|	glthread_lock_unlock(&mutex->mutex);
  ------------------
  |  |  313|  1.59k|    (pthread_in_use () ? pthread_mutex_unlock (LOCK) : 0)
  |  |  ------------------
  |  |  |  |  179|  1.59k|      (pthread_mutexattr_gettype != NULL || c11_threads_in_use ())
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      0|#  define c11_threads_in_use() (thrd_exit != NULL)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (87:32): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (179:8): [True: 1.59k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  128|  1.59k|}

wget_tls_session_db_deinit:
  194|  9.59k|{
  195|  9.59k|	if (tls_session_db) {
  ------------------
  |  Branch (195:6): [True: 0, False: 9.59k]
  ------------------
  196|      0|		wget_thread_mutex_lock(tls_session_db->mutex);
  197|      0|		wget_hashmap_free(&tls_session_db->entries);
  198|      0|		wget_thread_mutex_unlock(tls_session_db->mutex);
  199|       |
  200|      0|		wget_thread_mutex_destroy(&tls_session_db->mutex);
  201|      0|	}
  202|  9.59k|}
wget_tls_session_db_free:
  205|  9.59k|{
  206|  9.59k|	if (tls_session_db) {
  ------------------
  |  Branch (206:6): [True: 9.59k, False: 0]
  ------------------
  207|  9.59k|		wget_tls_session_db_deinit(*tls_session_db);
  208|  9.59k|		xfree(*tls_session_db);
  ------------------
  |  |   53|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 0, False: 9.59k]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  209|  9.59k|	}
  210|  9.59k|}

wget_strcasecmp_ascii:
  132|   560k|{
  133|   560k|	if (!s1) {
  ------------------
  |  Branch (133:6): [True: 0, False: 560k]
  ------------------
  134|      0|		if (!s2)
  ------------------
  |  Branch (134:7): [True: 0, False: 0]
  ------------------
  135|      0|			return 0;
  136|      0|		else
  137|      0|			return -1;
  138|   560k|	} else {
  139|   560k|		if (!s2)
  ------------------
  |  Branch (139:7): [True: 0, False: 560k]
  ------------------
  140|      0|			return 1;
  141|   560k|		else
  142|   560k|			return c_strcasecmp(s1, s2);
  143|   560k|	}
  144|   560k|}
wget_strncasecmp_ascii:
  160|  8.80k|{
  161|  8.80k|	if (!s1) {
  ------------------
  |  Branch (161:6): [True: 0, False: 8.80k]
  ------------------
  162|      0|		if (!s2)
  ------------------
  |  Branch (162:7): [True: 0, False: 0]
  ------------------
  163|      0|			return 0;
  164|      0|		else
  165|      0|			return -1;
  166|  8.80k|	} else {
  167|  8.80k|		if (!s2)
  ------------------
  |  Branch (167:7): [True: 0, False: 8.80k]
  ------------------
  168|      0|			return 1;
  169|  8.80k|		else
  170|  8.80k|			return c_strncasecmp(s1, s2, n);
  171|  8.80k|	}
  172|  8.80k|}
wget_strtolower:
  181|  19.3k|{
  182|  19.3k|	if (s) {
  ------------------
  |  Branch (182:6): [True: 19.3k, False: 0]
  ------------------
  183|  80.2k|		for (char *d = s; *d; d++) {
  ------------------
  |  Branch (183:21): [True: 60.9k, False: 19.3k]
  ------------------
  184|  60.9k|			if (c_isupper(*d))
  ------------------
  |  Branch (184:8): [True: 7.41k, False: 53.5k]
  ------------------
  185|  7.41k|				*d = (char) c_tolower(*d);
  186|  60.9k|		}
  187|  19.3k|	}
  188|       |
  189|  19.3k|	return s;
  190|  19.3k|}
wget_percent_unescape:
  318|  24.3k|{
  319|  24.3k|	int ret = 0;
  320|  24.3k|	unsigned char *s = (unsigned char *)src; // just a helper to avoid casting a lot
  321|  24.3k|	unsigned char *d = s;
  322|       |
  323|   233k|	while (*s) {
  ------------------
  |  Branch (323:9): [True: 209k, False: 24.3k]
  ------------------
  324|   209k|		if (*s == '%') {
  ------------------
  |  Branch (324:7): [True: 1.84k, False: 207k]
  ------------------
  325|  1.84k|			if (c_isxdigit(s[1]) && c_isxdigit(s[2])) {
  ------------------
  |  Branch (325:8): [True: 1.49k, False: 350]
  |  Branch (325:28): [True: 1.26k, False: 232]
  ------------------
  326|  1.26k|				*d++ = (unsigned char) (unhex(s[1]) << 4) | unhex(s[2]);
  327|  1.26k|				s += 3;
  328|  1.26k|				ret = 1;
  329|  1.26k|				continue;
  330|  1.26k|			}
  331|  1.84k|		}
  332|       |
  333|   207k|		*d++ = *s++;
  334|   207k|	}
  335|  24.3k|	*d = 0;
  336|       |
  337|  24.3k|	return ret;
  338|  24.3k|}
wget_strnglob:
  391|  12.6k|{
  392|  12.6k|	glob_t pglob;
  393|  12.6k|	char *expanded_str = NULL;
  394|       |
  395|  12.6k|	char *globstr = wget_strmemdup(str, n);
  396|       |
  397|  12.6k|	if (!globstr)
  ------------------
  |  Branch (397:6): [True: 0, False: 12.6k]
  ------------------
  398|      0|		return NULL;
  399|       |
  400|  12.6k|	if (glob(globstr, flags, NULL, &pglob) == 0) {
  ------------------
  |  Branch (400:6): [True: 12.6k, False: 0]
  ------------------
  401|  12.6k|		if (pglob.gl_pathc > 0) {
  ------------------
  |  Branch (401:7): [True: 12.6k, False: 0]
  ------------------
  402|  12.6k|			expanded_str = wget_aprintf("%s%s", pglob.gl_pathv[0], str+n);
  403|  12.6k|		}
  404|  12.6k|		globfree(&pglob);
  405|  12.6k|	}
  406|       |
  407|  12.6k|	xfree(globstr);
  ------------------
  |  |   53|  12.6k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 12.6k, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  408|  12.6k|	return expanded_str;
  409|  12.6k|}
utils.c:unhex:
  304|  2.53k|{
  305|  2.53k|	return c <= '9' ? c - '0' : (c <= 'F' ? c - 'A' + 10 : c - 'a' + 10);
  ------------------
  |  Branch (305:9): [True: 1.01k, False: 1.51k]
  |  Branch (305:31): [True: 723, False: 791]
  ------------------
  306|  2.53k|}

wget_vector_create:
   70|  29.6k|{
   71|  29.6k|	wget_vector *v = wget_calloc(1, sizeof(wget_vector));
   72|       |
   73|  29.6k|	if (!v)
  ------------------
  |  Branch (73:6): [True: 0, False: 29.6k]
  ------------------
   74|      0|		return NULL;
   75|       |
   76|  29.6k|	if (!(v->entry = wget_malloc(max * sizeof(void *)))) {
  ------------------
  |  Branch (76:6): [True: 0, False: 29.6k]
  ------------------
   77|      0|		xfree(v);
  ------------------
  |  |   53|      0|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 0, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
   78|      0|		return NULL;
   79|      0|	}
   80|       |
   81|  29.6k|	v->max = max;
   82|  29.6k|	v->resize_factor = 2;
   83|  29.6k|	v->cmp = cmp;
   84|  29.6k|	v->destructor = free;
   85|       |
   86|  29.6k|	return v;
   87|  29.6k|}
wget_vector_insert_sorted:
  183|  3.29k|{
  184|  3.29k|	if (!v)
  ------------------
  |  Branch (184:6): [True: 0, False: 3.29k]
  ------------------
  185|      0|		return WGET_E_INVALID;
  186|       |
  187|  3.29k|	if (!v->cmp)
  ------------------
  |  Branch (187:6): [True: 0, False: 3.29k]
  ------------------
  188|      0|		return insert_element(v, elem, v->cur, 0);
  189|       |
  190|  3.29k|	if (!v->sorted)
  ------------------
  |  Branch (190:6): [True: 796, False: 2.50k]
  ------------------
  191|    796|		wget_vector_sort(v);
  192|       |
  193|       |	// binary search for element
  194|  3.29k|	int l = 0, r = v->cur - 1, m = 0, res = 0;
  195|       |
  196|  9.95k|	while (l <= r) {
  ------------------
  |  Branch (196:9): [True: 6.65k, False: 3.29k]
  ------------------
  197|  6.65k|		m = (l + r) / 2;
  198|  6.65k|		if ((res = v->cmp(elem, v->entry[m])) > 0) l = m + 1;
  ------------------
  |  Branch (198:7): [True: 3.29k, False: 3.36k]
  ------------------
  199|  3.36k|		else if (res < 0) r = m - 1;
  ------------------
  |  Branch (199:12): [True: 3.36k, False: 0]
  ------------------
  200|      0|		else return insert_element(v, elem, m, 0);
  201|  6.65k|	}
  202|  3.29k|	if (res > 0) m++;
  ------------------
  |  Branch (202:6): [True: 977, False: 2.31k]
  ------------------
  203|       |
  204|  3.29k|	return insert_element(v, elem, m, 0);
  205|  3.29k|}
wget_vector_add:
  248|  73.7k|{
  249|  73.7k|	return v ? insert_element(v, elem, v->cur, 0) : WGET_E_INVALID;
  ------------------
  |  Branch (249:9): [True: 73.7k, False: 0]
  ------------------
  250|  73.7k|}
wget_vector_replace:
  316|  13.2k|{
  317|  13.2k|	if (!v || pos < 0 || pos >= v->cur)
  ------------------
  |  Branch (317:6): [True: 0, False: 13.2k]
  |  Branch (317:12): [True: 0, False: 13.2k]
  |  Branch (317:23): [True: 0, False: 13.2k]
  ------------------
  318|      0|		return WGET_E_INVALID;
  319|       |
  320|  13.2k|	if (v->destructor)
  ------------------
  |  Branch (320:6): [True: 13.2k, False: 0]
  ------------------
  321|  13.2k|		v->destructor(v->entry[pos]);
  322|       |
  323|  13.2k|	return insert_element(v, elem, pos, 1); // replace existing entry
  324|  13.2k|}
wget_vector_free:
  443|   161k|{
  444|   161k|	if (v && *v) {
  ------------------
  |  Branch (444:6): [True: 161k, False: 0]
  |  Branch (444:11): [True: 29.6k, False: 131k]
  ------------------
  445|  29.6k|		wget_vector_clear(*v);
  446|  29.6k|		xfree((*v)->entry);
  ------------------
  |  |   53|  29.6k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 29.6k, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  447|  29.6k|		xfree(*v);
  ------------------
  |  |   53|  29.6k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (53:27): [True: 29.6k, False: 0]
  |  |  |  Branch (53:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  448|  29.6k|	}
  449|   161k|}
wget_vector_clear:
  460|  30.8k|{
  461|  30.8k|	if (v) {
  ------------------
  |  Branch (461:6): [True: 30.4k, False: 381]
  ------------------
  462|  30.4k|		if (v->destructor) {
  ------------------
  |  Branch (462:7): [True: 30.4k, False: 0]
  ------------------
  463|   107k|			for (int it = 0; it < v->cur; it++) {
  ------------------
  |  Branch (463:21): [True: 77.0k, False: 30.4k]
  ------------------
  464|  77.0k|				v->destructor(v->entry[it]);
  465|  77.0k|				v->entry[it] = NULL;
  466|  77.0k|			}
  467|  30.4k|		}
  468|       |
  469|  30.4k|		v->cur = 0;
  470|  30.4k|	}
  471|  30.8k|}
wget_vector_size:
  498|   122k|{
  499|   122k|	return v ? v->cur : 0;
  ------------------
  |  Branch (499:9): [True: 85.2k, False: 37.2k]
  ------------------
  500|   122k|}
wget_vector_get:
  512|  30.7k|{
  513|  30.7k|	if (pos < 0 || !v || pos >= v->cur)
  ------------------
  |  Branch (513:6): [True: 0, False: 30.7k]
  |  Branch (513:17): [True: 0, False: 30.7k]
  |  Branch (513:23): [True: 0, False: 30.7k]
  ------------------
  514|      0|		return NULL;
  515|       |
  516|  30.7k|	return v->entry[pos];
  517|  30.7k|}
wget_vector_set_destructor:
  569|  15.7k|{
  570|  15.7k|	if (v)
  ------------------
  |  Branch (570:6): [True: 15.7k, False: 0]
  ------------------
  571|  15.7k|		v->destructor = destructor;
  572|  15.7k|}
wget_vector_sort:
  587|    796|{
  588|    796|	if (v && v->cmp) {
  ------------------
  |  Branch (588:6): [True: 796, False: 0]
  |  Branch (588:11): [True: 796, False: 0]
  ------------------
  589|    796|		qsort_r(v->entry, v->cur, sizeof(void *), compare_element, v);
  590|    796|		v->sorted = 1;
  591|    796|	}
  592|    796|}
wget_vector_find:
  603|  11.4k|{
  604|  11.4k|	if (!v || !v->cmp)
  ------------------
  |  Branch (604:6): [True: 0, False: 11.4k]
  |  Branch (604:12): [True: 0, False: 11.4k]
  ------------------
  605|      0|		return WGET_E_INVALID;
  606|       |
  607|  11.4k|	if (v->cur == 1) {
  ------------------
  |  Branch (607:6): [True: 1.11k, False: 10.3k]
  ------------------
  608|  1.11k|		if (v->cmp(elem, v->entry[0]) == 0) return 0;
  ------------------
  |  Branch (608:7): [True: 501, False: 614]
  ------------------
  609|  10.3k|	} else if (v->sorted) {
  ------------------
  |  Branch (609:13): [True: 9.45k, False: 872]
  ------------------
  610|       |		// binary search for element (exact match)
  611|  56.3k|		for (int l = 0, r = v->cur - 1; l <= r;) {
  ------------------
  |  Branch (611:35): [True: 49.7k, False: 6.63k]
  ------------------
  612|  49.7k|			int res, m = (l + r) / 2;
  613|  49.7k|			if ((res = v->cmp(elem, v->entry[m])) > 0) l = m + 1;
  ------------------
  |  Branch (613:8): [True: 42.7k, False: 6.99k]
  ------------------
  614|  6.99k|			else if (res < 0) r = m - 1;
  ------------------
  |  Branch (614:13): [True: 4.17k, False: 2.81k]
  ------------------
  615|  2.81k|			else return m;
  616|  49.7k|		}
  617|  9.45k|	} else {
  618|       |		// linear search for element
  619|    872|		for (int it = 0; it < v->cur; it++)
  ------------------
  |  Branch (619:20): [True: 0, False: 872]
  ------------------
  620|      0|			if (v->cmp(elem, v->entry[it]) == 0) return it;
  ------------------
  |  Branch (620:8): [True: 0, False: 0]
  ------------------
  621|    872|	}
  622|       |
  623|  8.12k|	return WGET_E_UNKNOWN; // not found
  624|  11.4k|}
vector.c:insert_element:
  108|  90.2k|{
  109|  90.2k|	if (pos < 0 || !v || pos > v->cur)
  ------------------
  |  Branch (109:6): [True: 0, False: 90.2k]
  |  Branch (109:17): [True: 0, False: 90.2k]
  |  Branch (109:23): [True: 0, False: 90.2k]
  ------------------
  110|      0|		return WGET_E_INVALID;
  111|       |
  112|  90.2k|	if (!replace) {
  ------------------
  |  Branch (112:6): [True: 77.0k, False: 13.2k]
  ------------------
  113|  77.0k|		if (v->max == v->cur) {
  ------------------
  |  Branch (113:7): [True: 2.07k, False: 74.9k]
  ------------------
  114|  2.07k|			int newsize = (int) (v->max * v->resize_factor);
  115|       |
  116|  2.07k|			if (newsize <= v->max)
  ------------------
  |  Branch (116:8): [True: 0, False: 2.07k]
  ------------------
  117|      0|				return WGET_E_INVALID;
  118|       |
  119|  2.07k|			void **tmp = wget_realloc(v->entry, newsize * sizeof(void *));
  120|  2.07k|			if (!tmp)
  ------------------
  |  Branch (120:8): [True: 0, False: 2.07k]
  ------------------
  121|      0|				return WGET_E_MEMORY;
  122|       |
  123|  2.07k|			v->entry = tmp;
  124|  2.07k|			v->max = newsize;
  125|  2.07k|		}
  126|       |
  127|  77.0k|		memmove(&v->entry[pos + 1], &v->entry[pos], (v->cur - pos) * sizeof(void *));
  128|  77.0k|		v->cur++;
  129|  77.0k|	}
  130|       |
  131|  90.2k|	v->entry[pos] = (void *) elem;
  132|       |
  133|  90.2k|	if (v->cmp) {
  ------------------
  |  Branch (133:6): [True: 68.0k, False: 22.2k]
  ------------------
  134|  68.0k|		if (v->cur == 1) v->sorted = 1;
  ------------------
  |  Branch (134:7): [True: 4.53k, False: 63.5k]
  ------------------
  135|  63.5k|		else if (v->cur > 1 && v->sorted) {
  ------------------
  |  Branch (135:12): [True: 63.5k, False: 0]
  |  Branch (135:26): [True: 26.8k, False: 36.6k]
  ------------------
  136|  26.8k|			if (pos == 0) {
  ------------------
  |  Branch (136:8): [True: 1.27k, False: 25.5k]
  ------------------
  137|  1.27k|				if (v->cmp(elem, v->entry[1]) > 0) v->sorted = 0;
  ------------------
  |  Branch (137:9): [True: 102, False: 1.16k]
  ------------------
  138|  25.5k|			} else if (pos == v->cur - 1) {
  ------------------
  |  Branch (138:15): [True: 21.5k, False: 3.99k]
  ------------------
  139|  21.5k|				if (v->cmp(elem, v->entry[v->cur - 2]) < 0) v->sorted = 0;
  ------------------
  |  Branch (139:9): [True: 982, False: 20.5k]
  ------------------
  140|  21.5k|			} else {
  141|  3.99k|				if (v->cmp(elem, v->entry[pos - 1]) < 0 ||
  ------------------
  |  Branch (141:9): [True: 65, False: 3.92k]
  ------------------
  142|  3.99k|					v->cmp(elem, v->entry[pos + 1]) > 0) {
  ------------------
  |  Branch (142:6): [True: 59, False: 3.86k]
  ------------------
  143|    124|					v->sorted = 0;
  144|    124|				}
  145|  3.99k|			}
  146|  26.8k|		}
  147|  68.0k|	}
  148|       |
  149|  90.2k|	return pos; // return position of new element
  150|  90.2k|}

options.c:wget_malloc:
  455|  59.4k|{
  456|  59.4k|	return wget_malloc_fn(size);
  457|  59.4k|}
options.c:wget_calloc:
  461|  5.09k|{
  462|  5.09k|	return wget_calloc_fn(nmemb, size);
  463|  5.09k|}
stats_site.c:wget_stringmap_free:
  935|     15|{
  936|     15|	wget_hashmap_free(h);
  937|     15|}
plugin.c:wget_stringmap_get:
  877|     50|{
  878|     50|	return wget_hashmap_get(h, key, value);
  ------------------
  |  |  770|     50|#define wget_hashmap_get(a, b, c) wget_hashmap_get((a), (b), (void **)(c))
  ------------------
  879|     50|}
plugin.c:wget_stringmap_set_key_destructor:
 1019|  9.59k|{
 1020|  9.59k|	wget_hashmap_set_key_destructor(h, (wget_hashmap_key_destructor *) destructor);
 1021|  9.59k|}
plugin.c:wget_stringmap_set_value_destructor:
 1033|  9.59k|{
 1034|  9.59k|	wget_hashmap_set_value_destructor(h, (wget_hashmap_value_destructor *) destructor);
 1035|  9.59k|}
plugin.c:wget_stringmap_free:
  935|  9.59k|{
  936|  9.59k|	wget_hashmap_free(h);
  937|  9.59k|}

c_isalnum:
  170|   756k|{
  171|   756k|  switch (c)
  172|   756k|    {
  173|  17.7k|    _C_CTYPE_DIGIT:
  ------------------
  |  |  135|  1.42k|   case '0': case '1': case '2': case '3': \
  |  |  ------------------
  |  |  |  Branch (135:4): [True: 356, False: 755k]
  |  |  |  Branch (135:14): [True: 305, False: 755k]
  |  |  |  Branch (135:24): [True: 292, False: 755k]
  |  |  |  Branch (135:34): [True: 469, False: 755k]
  |  |  ------------------
  |  |  136|  2.52k|   case '4': case '5': case '6': case '7': \
  |  |  ------------------
  |  |  |  Branch (136:4): [True: 290, False: 755k]
  |  |  |  Branch (136:14): [True: 256, False: 755k]
  |  |  |  Branch (136:24): [True: 317, False: 755k]
  |  |  |  Branch (136:34): [True: 239, False: 755k]
  |  |  ------------------
  |  |  137|  3.09k|   case '8': case '9'
  |  |  ------------------
  |  |  |  Branch (137:4): [True: 273, False: 755k]
  |  |  ------------------
  ------------------
  174|  9.57M|    _C_CTYPE_LOWER:
  ------------------
  |  |  138|  3.09k|#define _C_CTYPE_LOWER _C_CTYPE_LOWER_N (0)
  |  |  ------------------
  |  |  |  |  122|   208k|   _C_CTYPE_LOWER_A_THRU_F_N(N): \
  |  |  |  |  ------------------
  |  |  |  |  |  |  119|   129k|   case 'a' + (N): case 'b' + (N): case 'c' + (N): case 'd' + (N): \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (119:4): [True: 34.7k, False: 721k]
  |  |  |  |  |  |  |  Branch (119:20): [True: 4.71k, False: 751k]
  |  |  |  |  |  |  |  Branch (119:36): [True: 41.8k, False: 714k]
  |  |  |  |  |  |  |  Branch (119:52): [True: 44.9k, False: 711k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  120|   208k|   case 'e' + (N): case 'f' + (N)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (120:4): [True: 66.6k, False: 689k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (122:4): [True: 12.2k, False: 743k]
  |  |  |  |  ------------------
  |  |  |  |  123|   284k|   case 'g' + (N): case 'h' + (N): case 'i' + (N): case 'j' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (123:4): [True: 5.71k, False: 750k]
  |  |  |  |  |  Branch (123:20): [True: 12.0k, False: 744k]
  |  |  |  |  |  Branch (123:36): [True: 58.4k, False: 697k]
  |  |  |  |  |  Branch (123:52): [True: 362, False: 755k]
  |  |  |  |  ------------------
  |  |  |  |  124|   381k|   case 'k' + (N): case 'l' + (N): case 'm' + (N): case 'n' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:4): [True: 2.88k, False: 753k]
  |  |  |  |  |  Branch (124:20): [True: 30.3k, False: 725k]
  |  |  |  |  |  Branch (124:36): [True: 15.3k, False: 740k]
  |  |  |  |  |  Branch (124:52): [True: 48.6k, False: 707k]
  |  |  |  |  ------------------
  |  |  |  |  125|   500k|   case 'o' + (N): case 'p' + (N): case 'q' + (N): case 'r' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (125:4): [True: 42.9k, False: 713k]
  |  |  |  |  |  Branch (125:20): [True: 16.3k, False: 739k]
  |  |  |  |  |  Branch (125:36): [True: 22.6k, False: 733k]
  |  |  |  |  |  Branch (125:52): [True: 36.2k, False: 719k]
  |  |  |  |  ------------------
  |  |  |  |  126|   592k|   case 's' + (N): case 't' + (N): case 'u' + (N): case 'v' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (126:4): [True: 35.1k, False: 721k]
  |  |  |  |  |  Branch (126:20): [True: 30.9k, False: 725k]
  |  |  |  |  |  Branch (126:36): [True: 25.4k, False: 730k]
  |  |  |  |  |  Branch (126:52): [True: 529, False: 755k]
  |  |  |  |  ------------------
  |  |  |  |  127|   615k|   case 'w' + (N): case 'x' + (N): case 'y' + (N): case 'z' + (N)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (127:4): [True: 5.98k, False: 750k]
  |  |  |  |  |  Branch (127:20): [True: 9.17k, False: 747k]
  |  |  |  |  |  Branch (127:36): [True: 7.77k, False: 748k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  175|  9.57M|    _C_CTYPE_UPPER:
  ------------------
  |  |  148|   615k|#define _C_CTYPE_UPPER _C_CTYPE_LOWER_N ('A' - 'a')
  |  |  ------------------
  |  |  |  |  122|   629k|   _C_CTYPE_LOWER_A_THRU_F_N(N): \
  |  |  |  |  ------------------
  |  |  |  |  |  |  119|   627k|   case 'a' + (N): case 'b' + (N): case 'c' + (N): case 'd' + (N): \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (119:4): [True: 7.87k, False: 748k]
  |  |  |  |  |  |  |  Branch (119:20): [True: 722, False: 755k]
  |  |  |  |  |  |  |  Branch (119:36): [True: 1.72k, False: 754k]
  |  |  |  |  |  |  |  Branch (119:52): [True: 1.38k, False: 754k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  120|   629k|   case 'e' + (N): case 'f' + (N)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (120:4): [True: 1.51k, False: 754k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (122:4): [True: 456, False: 755k]
  |  |  |  |  ------------------
  |  |  |  |  123|   638k|   case 'g' + (N): case 'h' + (N): case 'i' + (N): case 'j' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (123:4): [True: 5.02k, False: 751k]
  |  |  |  |  |  Branch (123:20): [True: 827, False: 755k]
  |  |  |  |  |  Branch (123:36): [True: 2.50k, False: 753k]
  |  |  |  |  |  Branch (123:52): [True: 253, False: 755k]
  |  |  |  |  ------------------
  |  |  |  |  124|   643k|   case 'k' + (N): case 'l' + (N): case 'm' + (N): case 'n' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:4): [True: 351, False: 755k]
  |  |  |  |  |  Branch (124:20): [True: 812, False: 755k]
  |  |  |  |  |  Branch (124:36): [True: 1.75k, False: 754k]
  |  |  |  |  |  Branch (124:52): [True: 2.18k, False: 754k]
  |  |  |  |  ------------------
  |  |  |  |  125|   651k|   case 'o' + (N): case 'p' + (N): case 'q' + (N): case 'r' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (125:4): [True: 5.42k, False: 750k]
  |  |  |  |  |  Branch (125:20): [True: 1.39k, False: 754k]
  |  |  |  |  |  Branch (125:36): [True: 213, False: 756k]
  |  |  |  |  |  Branch (125:52): [True: 1.15k, False: 755k]
  |  |  |  |  ------------------
  |  |  |  |  126|   655k|   case 's' + (N): case 't' + (N): case 'u' + (N): case 'v' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (126:4): [True: 1.87k, False: 754k]
  |  |  |  |  |  Branch (126:20): [True: 1.07k, False: 755k]
  |  |  |  |  |  Branch (126:36): [True: 805, False: 755k]
  |  |  |  |  |  Branch (126:52): [True: 281, False: 755k]
  |  |  |  |  ------------------
  |  |  |  |  127|   657k|   case 'w' + (N): case 'x' + (N): case 'y' + (N): case 'z' + (N)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (127:4): [True: 213, False: 756k]
  |  |  |  |  |  Branch (127:20): [True: 716, False: 755k]
  |  |  |  |  |  Branch (127:36): [True: 970, False: 755k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  176|   657k|      return true;
  177|  98.7k|    default:
  ------------------
  |  Branch (177:5): [True: 98.7k, False: 657k]
  ------------------
  178|  98.7k|      return false;
  179|   756k|    }
  180|   756k|}
c_isspace:
  301|   449k|{
  302|   449k|  switch (c)
  303|   449k|    {
  304|  7.13k|    case ' ': case '\t': case '\n': case '\v': case '\f': case '\r':
  ------------------
  |  Branch (304:5): [True: 2.16k, False: 447k]
  |  Branch (304:15): [True: 627, False: 449k]
  |  Branch (304:26): [True: 0, False: 449k]
  |  Branch (304:37): [True: 974, False: 448k]
  |  Branch (304:48): [True: 2.79k, False: 447k]
  |  Branch (304:59): [True: 572, False: 449k]
  ------------------
  305|  7.13k|      return true;
  306|   442k|    default:
  ------------------
  |  Branch (306:5): [True: 442k, False: 7.13k]
  ------------------
  307|   442k|      return false;
  308|   449k|    }
  309|   449k|}
c_isdigit:
  234|  24.7k|{
  235|  24.7k|  switch (c)
  236|  24.7k|    {
  237|  16.2k|    _C_CTYPE_DIGIT:
  ------------------
  |  |  135|  6.34k|   case '0': case '1': case '2': case '3': \
  |  |  ------------------
  |  |  |  Branch (135:4): [True: 2.70k, False: 22.0k]
  |  |  |  Branch (135:14): [True: 1.70k, False: 23.0k]
  |  |  |  Branch (135:24): [True: 631, False: 24.1k]
  |  |  |  Branch (135:34): [True: 1.30k, False: 23.4k]
  |  |  ------------------
  |  |  136|  13.9k|   case '4': case '5': case '6': case '7': \
  |  |  ------------------
  |  |  |  Branch (136:4): [True: 1.84k, False: 22.9k]
  |  |  |  Branch (136:14): [True: 1.09k, False: 23.6k]
  |  |  |  Branch (136:24): [True: 1.52k, False: 23.2k]
  |  |  |  Branch (136:34): [True: 3.14k, False: 21.6k]
  |  |  ------------------
  |  |  137|  16.2k|   case '8': case '9'
  |  |  ------------------
  |  |  |  Branch (137:4): [True: 1.76k, False: 22.9k]
  |  |  ------------------
  ------------------
  238|  16.2k|      return true;
  239|  8.49k|    default:
  ------------------
  |  Branch (239:5): [True: 8.49k, False: 16.2k]
  ------------------
  240|  8.49k|      return false;
  241|  24.7k|    }
  242|  24.7k|}
c_tolower:
  338|  4.08M|{
  339|  4.08M|  switch (c)
  340|  4.08M|    {
  341|   208k|    _C_CTYPE_UPPER:
  ------------------
  |  |  148|      0|#define _C_CTYPE_UPPER _C_CTYPE_LOWER_N ('A' - 'a')
  |  |  ------------------
  |  |  |  |  122|  67.5k|   _C_CTYPE_LOWER_A_THRU_F_N(N): \
  |  |  |  |  ------------------
  |  |  |  |  |  |  119|  54.5k|   case 'a' + (N): case 'b' + (N): case 'c' + (N): case 'd' + (N): \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (119:4): [True: 34.5k, False: 4.04M]
  |  |  |  |  |  |  |  Branch (119:20): [True: 2.60k, False: 4.07M]
  |  |  |  |  |  |  |  Branch (119:36): [True: 11.3k, False: 4.07M]
  |  |  |  |  |  |  |  Branch (119:52): [True: 6.09k, False: 4.07M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  120|  67.5k|   case 'e' + (N): case 'f' + (N)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (120:4): [True: 7.74k, False: 4.07M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (122:4): [True: 5.21k, False: 4.07M]
  |  |  |  |  ------------------
  |  |  |  |  123|  97.2k|   case 'g' + (N): case 'h' + (N): case 'i' + (N): case 'j' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (123:4): [True: 5.37k, False: 4.07M]
  |  |  |  |  |  Branch (123:20): [True: 4.92k, False: 4.07M]
  |  |  |  |  |  Branch (123:36): [True: 19.1k, False: 4.06M]
  |  |  |  |  |  Branch (123:52): [True: 171, False: 4.08M]
  |  |  |  |  ------------------
  |  |  |  |  124|   115k|   case 'k' + (N): case 'l' + (N): case 'm' + (N): case 'n' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:4): [True: 913, False: 4.08M]
  |  |  |  |  |  Branch (124:20): [True: 3.09k, False: 4.07M]
  |  |  |  |  |  Branch (124:36): [True: 5.36k, False: 4.07M]
  |  |  |  |  |  Branch (124:52): [True: 9.15k, False: 4.07M]
  |  |  |  |  ------------------
  |  |  |  |  125|   144k|   case 'o' + (N): case 'p' + (N): case 'q' + (N): case 'r' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (125:4): [True: 18.8k, False: 4.06M]
  |  |  |  |  |  Branch (125:20): [True: 6.79k, False: 4.07M]
  |  |  |  |  |  Branch (125:36): [True: 300, False: 4.08M]
  |  |  |  |  |  Branch (125:52): [True: 3.33k, False: 4.07M]
  |  |  |  |  ------------------
  |  |  |  |  126|   204k|   case 's' + (N): case 't' + (N): case 'u' + (N): case 'v' + (N): \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (126:4): [True: 54.5k, False: 4.02M]
  |  |  |  |  |  Branch (126:20): [True: 3.11k, False: 4.07M]
  |  |  |  |  |  Branch (126:36): [True: 1.19k, False: 4.08M]
  |  |  |  |  |  Branch (126:52): [True: 365, False: 4.08M]
  |  |  |  |  ------------------
  |  |  |  |  127|   208k|   case 'w' + (N): case 'x' + (N): case 'y' + (N): case 'z' + (N)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (127:4): [True: 211, False: 4.08M]
  |  |  |  |  |  Branch (127:20): [True: 1.63k, False: 4.08M]
  |  |  |  |  |  Branch (127:36): [True: 2.04k, False: 4.07M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  342|   208k|      return c - 'A' + 'a';
  343|  3.87M|    default:
  ------------------
  |  Branch (343:5): [True: 3.87M, False: 208k]
  ------------------
  344|  3.87M|      return c;
  345|  4.08M|    }
  346|  4.08M|}

dl_error_set:
   49|    343|{
   50|    343|	dl_error_set_noalloc(e, wget_strdup(msg));
   51|    343|}
dl_error_set_printf:
   55|    125|{
   56|    125|	va_list arglist;
   57|       |
   58|    125|	va_start(arglist, format);
   59|    125|	dl_error_set_noalloc(e, wget_vaprintf(format, arglist));
   60|    125|	va_end(arglist);
   61|    125|}
dl_file_open:
  202|    109|{
  203|    109|	dl_error_set(e, dl_unsupported);
  204|    109|	return NULL;
  205|    109|}
dl_get_name_from_path:
  287|    109|{
  288|    109|	size_t start, len;
  289|    109|	int match = dl_match(path, &start, &len);
  290|       |
  291|    109|	if (!match && strict)
  ------------------
  |  Branch (291:6): [True: 108, False: 1]
  |  Branch (291:16): [True: 0, False: 108]
  ------------------
  292|      0|		return NULL;
  293|    109|	else
  294|    109|		return wget_strmemdup(path + start, len);
  295|    109|}
dl_search:
  298|     67|{
  299|     67|	int n_dirs = wget_vector_size(dirs);
  300|       |
  301|  4.57k|	for (int i = 0; i < n_dirs; i++) {
  ------------------
  |  Branch (301:18): [True: 4.50k, False: 67]
  ------------------
  302|  4.50k|		const char *dir = wget_vector_get(dirs, i);
  303|  4.50k|		if (dir && *dir) {
  ------------------
  |  Branch (303:7): [True: 4.50k, False: 0]
  |  Branch (303:14): [True: 4.50k, False: 0]
  ------------------
  304|  9.01k|			for (int j = 0; dl_patterns[j].prefix; j++) {
  ------------------
  |  Branch (304:20): [True: 4.50k, False: 4.50k]
  ------------------
  305|  4.50k|				char *filename = wget_aprintf("%s/%s%s%s", dir,
  306|  4.50k|						dl_patterns[j].prefix, name, dl_patterns[j].suffix);
  307|       |
  308|  4.50k|				if (is_regular_file(filename))
  ------------------
  |  Branch (308:9): [True: 0, False: 4.50k]
  ------------------
  309|      0|					return filename;
  310|       |
  311|  4.50k|				wget_free(filename);
  312|  4.50k|			}
  313|  4.50k|		} else {
  314|      0|			for (int j = 0; dl_patterns[j].prefix; j++) {
  ------------------
  |  Branch (314:20): [True: 0, False: 0]
  ------------------
  315|      0|				char *filename = wget_aprintf("%s%s%s",
  316|      0|						dl_patterns[j].prefix, name, dl_patterns[j].suffix);
  317|       |
  318|      0|				if (is_regular_file(filename))
  ------------------
  |  Branch (318:9): [True: 0, False: 0]
  ------------------
  319|      0|					return filename;
  320|       |
  321|      0|				wget_free(filename);
  322|      0|			}
  323|      0|		}
  324|  4.50k|	}
  325|       |
  326|     67|	return NULL;
  327|     67|}
dl_list:
  330|     14|{
  331|     14|	int n_dirs = wget_vector_size(dirs);
  332|       |
  333|    401|	for (int i = 0; i < n_dirs; i++) {
  ------------------
  |  Branch (333:18): [True: 387, False: 14]
  ------------------
  334|    387|		DIR *dirp;
  335|    387|		struct dirent *ent;
  336|    387|		const char *dir = wget_vector_get(dirs, i);
  337|       |
  338|    387|		dirp = opendir(dir);
  339|    387|		if (!dirp)
  ------------------
  |  Branch (339:7): [True: 387, False: 0]
  ------------------
  340|    387|			continue;
  341|       |
  342|      0|		while((ent = readdir(dirp)) != NULL) {
  ------------------
  |  Branch (342:9): [True: 0, False: 0]
  ------------------
  343|      0|			char *fname;
  344|      0|			char *name;
  345|       |
  346|      0|			fname = ent->d_name;
  347|       |
  348|       |			// Ignore entries that don't match the pattern
  349|      0|			name = dl_get_name_from_path(fname, 1);
  350|      0|			if (! name)
  ------------------
  |  Branch (350:8): [True: 0, False: 0]
  ------------------
  351|      0|				continue;
  352|       |
  353|       |			// Ignore entries that are not regular files
  354|      0|			{
  355|      0|				char *sfname = wget_aprintf("%s/%s", dir, fname);
  356|      0|				int x = is_regular_file(sfname);
  357|      0|				wget_free(sfname);
  358|      0|				if (!x) {
  ------------------
  |  Branch (358:9): [True: 0, False: 0]
  ------------------
  359|      0|					wget_free(name);
  360|      0|					continue;
  361|      0|				}
  362|      0|			}
  363|       |
  364|       |			// Add to the list
  365|      0|			wget_vector_add(names_out, name);
  366|      0|		}
  367|       |
  368|      0|		closedir(dirp);
  369|      0|	}
  370|     14|}
dl.c:dl_error_set_noalloc:
   39|    468|{
   40|    468|	if (msg && e->msg)
  ------------------
  |  Branch (40:6): [True: 234, False: 234]
  |  Branch (40:13): [True: 0, False: 234]
  ------------------
   41|      0|		wget_error_printf(_("Piling up error '%s' over error '%s'"), msg, e->msg);
  ------------------
  |  |   48|      0|#	define _(STRING) gettext(STRING)
  ------------------
   42|       |
   43|    468|	wget_free((void *) e->msg);
   44|    468|	e->msg = msg;
   45|    468|}
dl.c:dl_match:
  238|    109|{
  239|    109|	size_t i, mark;
  240|    109|	size_t start, len;
  241|       |
  242|       |	// Strip everything but the filename
  243|    109|	mark = 0;
  244|  3.16k|	for (i = 0; path[i]; i++) {
  ------------------
  |  Branch (244:14): [True: 3.05k, False: 109]
  ------------------
  245|  3.05k|		if (path[i] == '/')
  ------------------
  |  Branch (245:7): [True: 203, False: 2.85k]
  ------------------
  246|    203|			mark = i + 1;
  247|       |#ifdef _WIN32
  248|       |		if (path[i] == '\\')
  249|       |			mark = i + 1;
  250|       |#endif // _WIN32
  251|  3.05k|	}
  252|    109|	start = mark;
  253|    109|	len = i - start;
  254|       |
  255|       |	// Match for the pattern and extract the name
  256|    217|	for (i = 0; dl_patterns[i].prefix; i++) {
  ------------------
  |  Branch (256:14): [True: 109, False: 108]
  ------------------
  257|    109|		const char *p = dl_patterns[i].prefix;
  258|    109|		const char *s = dl_patterns[i].suffix;
  259|    109|		size_t pl = strlen(p);
  260|    109|		size_t sl = strlen(s);
  261|    109|		if (pl + sl >= len)
  ------------------
  |  Branch (261:7): [True: 26, False: 83]
  ------------------
  262|     26|			continue;
  263|     83|		if (memcmp(path + start + len - sl, s, sl) == 0 && memcmp(path + start, p, pl) == 0) {
  ------------------
  |  Branch (263:7): [True: 43, False: 40]
  |  Branch (263:54): [True: 1, False: 42]
  ------------------
  264|      1|			start += pl;
  265|      1|			len -= (pl + sl);
  266|      1|			break;
  267|      1|		}
  268|     83|	}
  269|       |
  270|    109|	*start_out = start;
  271|    109|	*len_out = len;
  272|    109|	return dl_patterns[i].prefix ? 1 : 0;
  ------------------
  |  Branch (272:9): [True: 1, False: 108]
  ------------------
  273|    109|}
dl.c:is_regular_file:
  276|  4.50k|{
  277|  4.50k|	struct stat statbuf;
  278|       |
  279|  4.50k|	if (stat(filename, &statbuf) < 0)
  ------------------
  |  Branch (279:6): [True: 4.50k, False: 0]
  ------------------
  280|  4.50k|		return 0;
  281|      0|	if (S_ISREG(statbuf.st_mode))
  282|      0|		return 1;
  283|      0|	return 0;
  284|      0|}

log_init:
  194|  28.7k|{
  195|       |#ifdef _WIN32
  196|       |	InitializeCriticalSection (&g_crit);
  197|       |#endif
  198|       |
  199|  28.7k|	wget_console_init();
  200|       |
  201|       |/*
  202|       |	WGET_LOGGER *logger = wget_get_logger(WGET_LOGGER_DEBUG);
  203|       |	if (config.debug) {
  204|       |		if (!config.logfile)
  205|       |			wget_logger_set_file(logger, stderr); // direct debug output to STDERR
  206|       |		else if (*config.logfile == '-' && config.logfile[1] == 0)
  207|       |			wget_logger_set_file(logger, stdout); // direct debug output to STDIN
  208|       |		else
  209|       |			wget_logger_set_filename(logger, config.logfile);  // direct debug output to logfile
  210|       |
  211|       |		wget_logger_set_timestamp(logger, 1); // switch timestamps on
  212|       |	} else
  213|       |		wget_logger_set_file(logger, NULL); // stop logging (if already started)
  214|       |*/
  215|       |
  216|       |// no printing during fuzzing
  217|       |#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
  218|       |	// set debug logging
  219|       |	wget_logger_set_func(wget_get_logger(WGET_LOGGER_DEBUG), config.debug ? write_debug_stderr : NULL);
  220|       |
  221|       |	// set debug logging
  222|       |	wget_logger_set_func(wget_get_logger(WGET_LOGGER_ERROR), config.quiet ? NULL : write_error_stderr);
  223|       |
  224|       |	// set error logging
  225|       |//	wget_logger_set_stream(wget_get_logger(WGET_LOGGER_ERROR), config.quiet ? NULL : stderr);
  226|       |
  227|       |	// set info logging
  228|       |	wget_logger_set_func(wget_get_logger(WGET_LOGGER_INFO),
  229|       |		config.verbose && !config.quiet ? ((fileno(stdout) == fileno(stderr) || !wget_strcmp(config.output_document, "-")) ? write_info_stderr : write_info_stdout) : NULL);
  230|       |//	wget_logger_set_stream(wget_get_logger(WGET_LOGGER_INFO), config.verbose && !config.quiet ? stdout : NULL);
  231|       |#endif
  232|  28.7k|}

set_exit_status:
   75|     21|{
   76|       |	// use Wget exit status scheme:
   77|       |	// - error code 0 is default
   78|       |	// - error code 1 is used directly by exit() (fatal errors)
   79|       |	// - error codes 2... : lower numbers precede higher numbers
   80|     21|	if (exit_status) {
  ------------------
  |  Branch (80:6): [True: 0, False: 21]
  ------------------
   81|      0|		if (status < exit_status) {
  ------------------
  |  Branch (81:7): [True: 0, False: 0]
  ------------------
   82|      0|			debug_printf("%s(%d)\n", __func__, (int) status);
  ------------------
  |  |   57|      0|#define debug_printf wget_debug_printf
  ------------------
   83|      0|			exit_status = status;
   84|      0|		}
   85|     21|	} else {
   86|     21|		debug_printf("%s(%d)\n", __func__, (int) status);
  ------------------
  |  |   57|     21|#define debug_printf wget_debug_printf
  ------------------
   87|     21|		exit_status = status;
   88|     21|	}
   89|     21|}
init:
 3338|  9.59k|{
 3339|  9.59k|	int n, rc;
 3340|       |
 3341|       |	// use our own allocation functions so we can print error + exit() in a out-of-memory situation
 3342|  9.59k|	set_allocation_functions();
 3343|       |
 3344|       |	// this is a special case for switching on debugging before any config file is read
 3345|  9.59k|	if (argc >= 2) {
  ------------------
  |  Branch (3345:6): [True: 9.59k, False: 0]
  ------------------
 3346|  9.59k|		if (!strcmp(argv[1],"-d"))
  ------------------
  |  Branch (3346:7): [True: 0, False: 9.59k]
  ------------------
 3347|      0|			config.debug = 1;
 3348|  9.59k|		else if (!strcmp(argv[1],"--debug")) {
  ------------------
  |  Branch (3348:12): [True: 0, False: 9.59k]
  ------------------
 3349|      0|			if ((rc = set_long_option(argv[1] + 2, argv[2], 0)) < 0)
  ------------------
  |  Branch (3349:8): [True: 0, False: 0]
  ------------------
 3350|      0|				return rc;
 3351|      0|		}
 3352|  9.59k|	}
 3353|       |
 3354|       |	// Initialize some configuration values which depend on the Runtime environment
 3355|  9.59k|	const char *home_dir = get_home_dir(false);
 3356|  9.59k|	const char *xdg_config_home = get_xdg_config_home(home_dir);
 3357|  9.59k|	const char *xdg_data_home = get_xdg_data_home(home_dir);
 3358|       |
 3359|       |	// We need these because the parse_string() method will attempt to free the
 3360|       |	// value before setting a new one. Hence, these must be dynamically
 3361|       |	// allocated
 3362|  9.59k|	config.user_agent = wget_strdup(config.user_agent);
 3363|  9.59k|	config.secure_protocol = wget_strdup(config.secure_protocol);
 3364|  9.59k|	config.ca_directory = wget_strdup(config.ca_directory);
 3365|  9.59k|	config.ca_cert = wget_strdup(config.ca_cert);
 3366|  9.59k|	config.default_page = wget_strdup(config.default_page);
 3367|  9.59k|	config.system_config = wget_strdup(config.system_config);
 3368|       |
 3369|  9.59k|	log_init();
 3370|       |
 3371|  9.59k|	get_config_files(xdg_config_home, home_dir);
 3372|       |
 3373|       |	// first processing, to respect options that might influence output
 3374|       |	// while read_config() (e.g. -d, -q, -a, -o)
 3375|  9.59k|	if (parse_command_line(argc, argv) < 0)
  ------------------
  |  Branch (3375:6): [True: 0, False: 9.59k]
  ------------------
 3376|      0|		return -1;
 3377|       |
 3378|       |	// truncate logfile, if not in append mode
 3379|  9.59k|	if (config.logfile_append) {
  ------------------
  |  Branch (3379:6): [True: 0, False: 9.59k]
  ------------------
 3380|      0|		xfree(config.logfile);
  ------------------
  |  |   61|      0|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 0, False: 0]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3381|      0|		config.logfile = config.logfile_append;
 3382|      0|		config.logfile_append = NULL;
 3383|      0|	}
 3384|  9.59k|	else if (config.logfile && strcmp(config.logfile, "-") && !config.dont_write) {
  ------------------
  |  Branch (3384:11): [True: 0, False: 9.59k]
  |  Branch (3384:29): [True: 0, False: 0]
  |  Branch (3384:60): [True: 0, False: 0]
  ------------------
 3385|      0|		int fd = open(config.logfile, O_WRONLY | O_TRUNC);
 3386|       |
 3387|      0|		if (fd != -1)
  ------------------
  |  Branch (3387:7): [True: 0, False: 0]
  ------------------
 3388|      0|			close(fd);
 3389|      0|	}
 3390|  9.59k|	log_init();
 3391|       |
 3392|  9.59k|	if (config.hsts && !config.hsts_file)
  ------------------
  |  Branch (3392:6): [True: 0, False: 9.59k]
  |  Branch (3392:21): [True: 0, False: 0]
  ------------------
 3393|      0|		config.hsts_file = wget_aprintf("%s/.wget-hsts", xdg_data_home);
 3394|       |
 3395|  9.59k|	if (config.hpkp && !config.hpkp_file)
  ------------------
  |  Branch (3395:6): [True: 0, False: 9.59k]
  |  Branch (3395:21): [True: 0, False: 0]
  ------------------
 3396|      0|		config.hpkp_file = wget_aprintf("%s/.wget-hpkp", xdg_data_home);
 3397|       |
 3398|  9.59k|	if (config.tls_resume && !config.tls_session_file)
  ------------------
  |  Branch (3398:6): [True: 0, False: 9.59k]
  |  Branch (3398:27): [True: 0, False: 0]
  ------------------
 3399|      0|		config.tls_session_file = wget_aprintf("%s/.wget-session", xdg_data_home);
 3400|       |
 3401|  9.59k|	if (config.ocsp && !config.ocsp_file)
  ------------------
  |  Branch (3401:6): [True: 0, False: 9.59k]
  |  Branch (3401:21): [True: 0, False: 0]
  ------------------
 3402|      0|		config.ocsp_file = wget_aprintf("%s/.wget-ocsp", xdg_data_home);
 3403|       |
 3404|  9.59k|	if (config.netrc && !config.netrc_file)
  ------------------
  |  Branch (3404:6): [True: 8.56k, False: 1.03k]
  |  Branch (3404:22): [True: 8.56k, False: 0]
  ------------------
 3405|  8.56k|		config.netrc_file = wget_aprintf("%s/.netrc", home_dir);
 3406|       |
 3407|       |#ifdef WITH_LIBHSTS
 3408|       |	if (config.hsts_preload && !config.hsts_preload_file && *hsts_dist_filename())
 3409|       |		config.hsts_preload_file = wget_strdup(hsts_dist_filename());
 3410|       |#endif
 3411|       |
 3412|  9.59k|	wget_vector_free(&config.exclude_directories); // -I and -X stack up, so free before final command line parsing
 3413|       |
 3414|       |	//Enable plugin loading
 3415|  9.59k|	{
 3416|  9.59k|		const char *path;
 3417|       |
 3418|  9.59k|		plugin_loading_enabled = 1;
 3419|  9.59k|		path = getenv("WGET2_PLUGIN_DIRS");
 3420|  9.59k|		if (path) {
  ------------------
  |  Branch (3420:7): [True: 0, False: 9.59k]
  ------------------
 3421|      0|			plugin_db_clear_search_paths();
 3422|       |#ifdef _WIN32
 3423|       |			plugin_db_add_search_paths(path, ';');
 3424|       |#else
 3425|      0|			plugin_db_add_search_paths(path, ':');
 3426|      0|#endif
 3427|      0|		}
 3428|       |
 3429|  9.59k|		if (plugin_db_load_from_envvar()) {
  ------------------
  |  Branch (3429:7): [True: 0, False: 9.59k]
  ------------------
 3430|      0|			set_exit_status(EXIT_STATUS_PARSE_INIT);
 3431|      0|			return -1; // stop processing & exit
 3432|      0|		}
 3433|  9.59k|	}
 3434|       |
 3435|       |	// read global config and user's config
 3436|       |	// settings in user's config override global settings
 3437|  9.59k|	read_config();
 3438|       |
 3439|       |	// now read command line options which override the settings of the config files
 3440|  9.59k|	if ((n = parse_command_line(argc, argv)) < 0)
  ------------------
  |  Branch (3440:6): [True: 0, False: 9.59k]
  ------------------
 3441|      0|		return -1;
 3442|       |
 3443|  9.59k|	if (plugin_db_help_forwarded()) {
  ------------------
  |  Branch (3443:6): [True: 3, False: 9.58k]
  ------------------
 3444|      3|		set_exit_status(EXIT_STATUS_NO_ERROR);
 3445|      3|		return -1; // stop processing & exit
 3446|      3|	}
 3447|       |
 3448|  9.58k|	if (config.logfile_append) {
  ------------------
  |  Branch (3448:6): [True: 2, False: 9.58k]
  ------------------
 3449|      2|		xfree(config.logfile);
  ------------------
  |  |   61|      2|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 1]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3450|      2|		config.logfile = config.logfile_append;
 3451|      2|		config.logfile_append = NULL;
 3452|      2|	}
 3453|  9.58k|	else if (config.logfile && strcmp(config.logfile, "-") && !config.dont_write) {
  ------------------
  |  Branch (3453:11): [True: 4, False: 9.58k]
  |  Branch (3453:29): [True: 3, False: 1]
  |  Branch (3453:60): [True: 0, False: 3]
  ------------------
 3454|       |		// truncate logfile
 3455|      0|		int fd = open(config.logfile, O_WRONLY | O_TRUNC);
 3456|       |
 3457|      0|		if (fd != -1)
  ------------------
  |  Branch (3457:7): [True: 0, False: 0]
  ------------------
 3458|      0|			close(fd);
 3459|      0|	}
 3460|       |
 3461|  9.58k|	log_init();
 3462|       |
 3463|  9.58k|	if (config.logfile) {
  ------------------
  |  Branch (3463:6): [True: 6, False: 9.58k]
  ------------------
 3464|       |		// Currently, we do not support mixing progress bar and log output.
 3465|      6|		config.progress = PROGRESS_TYPE_NONE;
  ------------------
  |  |   31|      6|#define PROGRESS_TYPE_NONE  0
  ------------------
 3466|      6|	}
 3467|       |
 3468|  9.58k|	if (config.https_only && config.https_enforce)
  ------------------
  |  Branch (3468:6): [True: 7.49k, False: 2.09k]
  |  Branch (3468:27): [True: 17, False: 7.48k]
  ------------------
 3469|       |		// disable https enforce if https-only is enabled
 3470|     17|		config.https_enforce = HTTPS_ENFORCE_NONE;
 3471|       |
 3472|  9.58k|	wget_iri_set_defaultport(WGET_IRI_SCHEME_HTTP, config.default_http_port);
 3473|  9.58k|	wget_iri_set_defaultport(WGET_IRI_SCHEME_HTTPS, config.default_https_port);
 3474|       |
 3475|       |	// check for correct settings
 3476|  9.58k|	if (config.max_threads < 1 || (config.max_threads > 1 && config.chunk_size))
  ------------------
  |  Branch (3476:6): [True: 28, False: 9.56k]
  |  Branch (3476:33): [True: 3.72k, False: 5.84k]
  |  Branch (3476:59): [True: 29, False: 3.69k]
  ------------------
 3477|     57|		config.max_threads = 1;
 3478|       |
 3479|  9.58k|	if (config.hyperlink) {
  ------------------
  |  Branch (3479:6): [True: 7.79k, False: 1.79k]
  ------------------
 3480|  7.79k|		config.hostname = xgethostname();
 3481|  7.79k|	}
 3482|       |
 3483|       |	// truncate output document
 3484|  9.58k|	if (config.output_document && strcmp(config.output_document, "-") && !config.dont_write) {
  ------------------
  |  Branch (3484:6): [True: 3, False: 9.58k]
  |  Branch (3484:32): [True: 2, False: 1]
  |  Branch (3484:71): [True: 0, False: 2]
  ------------------
 3485|      0|		if (config.unlink) {
  ------------------
  |  Branch (3485:7): [True: 0, False: 0]
  ------------------
 3486|      0|			unlink(config.output_document);
 3487|      0|		} else {
 3488|      0|			int fd = open(config.output_document, O_WRONLY | O_TRUNC | O_BINARY);
 3489|       |
 3490|      0|			if (fd != -1)
  ------------------
  |  Branch (3490:8): [True: 0, False: 0]
  ------------------
 3491|      0|				close(fd);
 3492|      0|		}
 3493|      0|	}
 3494|       |
 3495|  9.58k|	if (!config.local_encoding)
  ------------------
  |  Branch (3495:6): [True: 9.38k, False: 204]
  ------------------
 3496|  9.38k|		config.local_encoding = wget_local_charset_encoding();
 3497|  9.58k|	if (!config.input_encoding)
  ------------------
  |  Branch (3497:6): [True: 9.58k, False: 3]
  ------------------
 3498|  9.58k|		config.input_encoding = wget_strdup(config.local_encoding);
 3499|       |
 3500|  9.58k|	debug_printf("Local URI encoding = '%s'\n", config.local_encoding);
  ------------------
  |  |   57|  9.58k|#define debug_printf wget_debug_printf
  ------------------
 3501|  9.58k|	debug_printf("Input URI encoding = '%s'\n", config.input_encoding);
  ------------------
  |  |   57|  9.58k|#define debug_printf wget_debug_printf
  ------------------
 3502|       |
 3503|       |//Set environ proxy var only if a corresponding command-line proxy var isn't supplied
 3504|  9.58k|	if (config.proxy) {
  ------------------
  |  Branch (3504:6): [True: 7.02k, False: 2.56k]
  ------------------
 3505|  7.02k|		if (!config.http_proxy)
  ------------------
  |  Branch (3505:7): [True: 6.57k, False: 442]
  ------------------
 3506|  6.57k|			config.http_proxy = wget_strdup(getenv("http_proxy"));
 3507|  7.02k|		if (!config.https_proxy)
  ------------------
  |  Branch (3507:7): [True: 7.00k, False: 12]
  ------------------
 3508|  7.00k|			config.https_proxy = wget_strdup(getenv("https_proxy"));
 3509|  7.02k|		if (!config.no_proxy)
  ------------------
  |  Branch (3509:7): [True: 6.95k, False: 71]
  ------------------
 3510|  6.95k|			config.no_proxy = wget_strdup(getenv("no_proxy"));
 3511|  7.02k|	}
 3512|       |
 3513|  9.58k|	if (config.http_proxy && *config.http_proxy && !wget_http_set_http_proxy(config.http_proxy, config.local_encoding)) {
  ------------------
  |  Branch (3513:6): [True: 541, False: 9.04k]
  |  Branch (3513:27): [True: 538, False: 3]
  |  Branch (3513:49): [True: 88, False: 450]
  ------------------
 3514|     88|		error_printf(_("Failed to set http proxies %s\n"), config.http_proxy);
  ------------------
  |  |   55|     88|#define error_printf  wget_error_printf
  ------------------
              		error_printf(_("Failed to set http proxies %s\n"), config.http_proxy);
  ------------------
  |  |   48|     88|#	define _(STRING) gettext(STRING)
  ------------------
 3515|     88|		return -1;
 3516|     88|	}
 3517|  9.50k|	if (config.https_proxy && *config.https_proxy && !wget_http_set_https_proxy(config.https_proxy, config.local_encoding)) {
  ------------------
  |  Branch (3517:6): [True: 15, False: 9.48k]
  |  Branch (3517:28): [True: 11, False: 4]
  |  Branch (3517:51): [True: 1, False: 10]
  ------------------
 3518|      1|		error_printf(_("Failed to set https proxies %s\n"), config.https_proxy);
  ------------------
  |  |   55|      1|#define error_printf  wget_error_printf
  ------------------
              		error_printf(_("Failed to set https proxies %s\n"), config.https_proxy);
  ------------------
  |  |   48|      1|#	define _(STRING) gettext(STRING)
  ------------------
 3519|      1|		return -1;
 3520|      1|	}
 3521|  9.50k|	if (config.no_proxy && wget_http_set_no_proxy(config.no_proxy, config.local_encoding) < 0) {
  ------------------
  |  Branch (3521:6): [True: 103, False: 9.39k]
  |  Branch (3521:25): [True: 0, False: 103]
  ------------------
 3522|      0|		error_printf(_("Failed to set proxy exceptions %s\n"), config.no_proxy);
  ------------------
  |  |   55|      0|#define error_printf  wget_error_printf
  ------------------
              		error_printf(_("Failed to set proxy exceptions %s\n"), config.no_proxy);
  ------------------
  |  |   48|      0|#	define _(STRING) gettext(STRING)
  ------------------
 3523|      0|		return -1;
 3524|      0|	}
 3525|  9.50k|	xfree(config.http_proxy);
  ------------------
  |  |   61|  9.50k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 453, False: 9.04k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3526|  9.50k|	xfree(config.https_proxy);
  ------------------
  |  |   61|  9.50k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 14, False: 9.48k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3527|  9.50k|	xfree(config.no_proxy);
  ------------------
  |  |   61|  9.50k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 103, False: 9.39k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3528|       |
 3529|       |#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
 3530|       |	if (config.cookies) {
 3531|       |		config.cookie_db = wget_cookie_db_init(NULL);
 3532|       |		wget_cookie_set_keep_session_cookies(config.cookie_db, config.keep_session_cookies);
 3533|       |		if (config.cookie_suffixes)
 3534|       |			wget_cookie_db_load_psl(config.cookie_db, config.cookie_suffixes);
 3535|       |		if (config.load_cookies)
 3536|       |			wget_cookie_db_load(config.cookie_db, config.load_cookies);
 3537|       |	}
 3538|       |
 3539|       |	if (config.hsts) {
 3540|       |		if (!config.hsts_db)
 3541|       |			config.hsts_db = wget_hsts_db_init(NULL, config.hsts_file);
 3542|       |		wget_hsts_db_load(config.hsts_db);
 3543|       |	}
 3544|       |
 3545|       |#ifdef WITH_LIBHSTS
 3546|       |	if (config.hsts_preload && config.hsts_preload_file) {
 3547|       |		if ((rc = hsts_load_file(config.hsts_preload_file, &config.hsts_preload_data))) {
 3548|       |			wget_error_printf(_("Failed to load %s (%d)"), config.hsts_preload_file, rc);
 3549|       |		}
 3550|       |	}
 3551|       |#endif
 3552|       |
 3553|       |	if (config.hpkp) {
 3554|       |		if (!config.hpkp_db)
 3555|       |			config.hpkp_db = wget_hpkp_db_init(NULL, config.hpkp_file);
 3556|       |		wget_hpkp_db_load(config.hpkp_db);
 3557|       |	}
 3558|       |
 3559|       |	if (config.tls_resume) {
 3560|       |		config.tls_session_db = wget_tls_session_db_init(NULL);
 3561|       |		wget_tls_session_db_load(config.tls_session_db, config.tls_session_file);
 3562|       |	}
 3563|       |
 3564|       |	if (config.ocsp) {
 3565|       |		if (!config.ocsp_db)
 3566|       |			config.ocsp_db = wget_ocsp_db_init(NULL, config.ocsp_file);
 3567|       |		wget_ocsp_db_load(config.ocsp_db);
 3568|       |	}
 3569|       |#endif
 3570|       |
 3571|  9.50k|	if (config.base_url)
  ------------------
  |  Branch (3571:6): [True: 2.44k, False: 7.05k]
  ------------------
 3572|  2.44k|		config.base = wget_iri_parse(config.base_url, config.local_encoding);
 3573|       |
 3574|  9.50k|	if (config.askpass && n < argc) {
  ------------------
  |  Branch (3574:6): [True: 190, False: 9.31k]
  |  Branch (3574:24): [True: 0, False: 190]
  ------------------
 3575|      0|		xfree(config.password);
  ------------------
  |  |   61|      0|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 0, False: 0]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3576|      0|		config.password = prompt_for_password();
 3577|      0|	}
 3578|       |
 3579|  9.50k|	if (config.use_askpass_bin && n < argc && use_askpass() < 0)
  ------------------
  |  Branch (3579:6): [True: 1, False: 9.49k]
  |  Branch (3579:32): [True: 0, False: 1]
  |  Branch (3579:44): [True: 0, False: 0]
  ------------------
 3580|      0|		return -1;
 3581|       |
 3582|  9.50k|	if (!config.http_username)
  ------------------
  |  Branch (3582:6): [True: 9.49k, False: 4]
  ------------------
 3583|  9.49k|		config.http_username = wget_strdup(config.username);
 3584|       |
 3585|  9.50k|	if (!config.http_password)
  ------------------
  |  Branch (3585:6): [True: 9.49k, False: 1]
  ------------------
 3586|  9.49k|		config.http_password = wget_strdup(config.password);
 3587|       |
 3588|  9.50k|	if (!config.http_proxy_username)
  ------------------
  |  Branch (3588:6): [True: 9.49k, False: 5]
  ------------------
 3589|  9.49k|		config.http_proxy_username = wget_strdup(config.username);
 3590|       |
 3591|  9.50k|	if (!config.http_proxy_password)
  ------------------
  |  Branch (3591:6): [True: 9.49k, False: 1]
  ------------------
 3592|  9.49k|		config.http_proxy_password = wget_strdup(config.password);
 3593|       |
 3594|  9.50k|	if (config.auth_no_challenge) {
  ------------------
  |  Branch (3594:6): [True: 4.78k, False: 4.71k]
  ------------------
 3595|  4.78k|		config.default_challenges = wget_vector_create(1, NULL);
 3596|  4.78k|		wget_http_challenge *basic = wget_calloc(1, sizeof(wget_http_challenge));
 3597|  4.78k|		basic->auth_scheme = wget_strdup("basic");
 3598|  4.78k|		wget_vector_add(config.default_challenges, basic);
 3599|  4.78k|		wget_vector_set_destructor(config.default_challenges, (wget_vector_destructor *) wget_http_free_challenge);
 3600|  4.78k|	}
 3601|       |
 3602|  9.50k|	if (config.page_requisites && !config.recursive) {
  ------------------
  |  Branch (3602:6): [True: 5.68k, False: 3.81k]
  |  Branch (3602:32): [True: 7, False: 5.67k]
  ------------------
 3603|      7|		config.recursive = 1;
 3604|      7|		config.level = 1;
 3605|      7|	}
 3606|       |
 3607|  9.50k|	if (config.start_pos && config.continue_download) {
  ------------------
  |  Branch (3607:6): [True: 7.36k, False: 2.13k]
  |  Branch (3607:26): [True: 0, False: 7.36k]
  ------------------
 3608|      0|		error_printf(_("Specifying both --start-pos and --continue is not recommended; --continue will be disabled"));
  ------------------
  |  |   55|      0|#define error_printf  wget_error_printf
  ------------------
              		error_printf(_("Specifying both --start-pos and --continue is not recommended; --continue will be disabled"));
  ------------------
  |  |   48|      0|#	define _(STRING) gettext(STRING)
  ------------------
 3609|      0|		config.continue_download = 0;
 3610|      0|	}
 3611|       |
 3612|  9.50k|	if (config.timestamping) {
  ------------------
  |  Branch (3612:6): [True: 55, False: 9.44k]
  ------------------
 3613|     55|		if (config.output_document) {
  ------------------
  |  Branch (3613:7): [True: 1, False: 54]
  ------------------
 3614|      1|			error_printf(_("WARNING: timestamping does nothing in combination with -O"));
  ------------------
  |  |   55|      1|#define error_printf  wget_error_printf
  ------------------
              			error_printf(_("WARNING: timestamping does nothing in combination with -O"));
  ------------------
  |  |   48|      1|#	define _(STRING) gettext(STRING)
  ------------------
 3615|      1|			config.timestamping = 0;
 3616|      1|		}
 3617|     55|		if (!config.clobber) {
  ------------------
  |  Branch (3617:7): [True: 55, False: 0]
  ------------------
 3618|     55|			error_printf(_("Can't timestamp and not clobber old files at the same time"));
  ------------------
  |  |   55|     55|#define error_printf  wget_error_printf
  ------------------
              			error_printf(_("Can't timestamp and not clobber old files at the same time"));
  ------------------
  |  |   48|     55|#	define _(STRING) gettext(STRING)
  ------------------
 3619|     55|			config.timestamping = 0;
 3620|     55|		}
 3621|     55|		if (config.spider) {
  ------------------
  |  Branch (3621:7): [True: 52, False: 3]
  ------------------
 3622|     52|			error_printf(_("WARNING: timestamping does nothing in combination with spider"));
  ------------------
  |  |   55|     52|#define error_printf  wget_error_printf
  ------------------
              			error_printf(_("WARNING: timestamping does nothing in combination with spider"));
  ------------------
  |  |   48|     52|#	define _(STRING) gettext(STRING)
  ------------------
 3623|     52|			config.timestamping = 0;
 3624|     52|		}
 3625|     55|		if (config.chunk_size && config.if_modified_since) {
  ------------------
  |  Branch (3625:7): [True: 51, False: 4]
  |  Branch (3625:28): [True: 1, False: 50]
  ------------------
 3626|      1|			error_printf(_("WARNING: timestamping and chunk-size only work together without If-Modified-Since"));
  ------------------
  |  |   55|      1|#define error_printf  wget_error_printf
  ------------------
              			error_printf(_("WARNING: timestamping and chunk-size only work together without If-Modified-Since"));
  ------------------
  |  |   48|      1|#	define _(STRING) gettext(STRING)
  ------------------
 3627|      1|			config.if_modified_since = 0;
 3628|      1|		}
 3629|     55|	}
 3630|       |
 3631|  9.50k|	if (config.mirror)
  ------------------
  |  Branch (3631:6): [True: 4.61k, False: 4.88k]
  ------------------
 3632|  4.61k|		config.metalink = 0;
 3633|       |
 3634|  9.50k|	if (config.verify_sig) {
  ------------------
  |  Branch (3634:6): [True: 0, False: 9.50k]
  ------------------
 3635|       |#ifdef WITH_GPGME
 3636|       |		init_gpgme();
 3637|       |		if (!config.sig_ext) {
 3638|       |			config.sig_ext = wget_vector_create(1, (wget_vector_compare_fn *) strcmp);
 3639|       |			wget_vector_add(config.sig_ext, wget_strdup("sig"));
 3640|       |		} else {
 3641|       |
 3642|       |			// Dedupe ...
 3643|       |			// Duplicate extensions break the chain when "add_url" blocks the requests
 3644|       |			// so they don't come back as a failure.
 3645|       |			int start_len = wget_vector_size(config.sig_ext);
 3646|       |			wget_vector *new_sig_ext = wget_vector_create(start_len, (wget_vector_compare_fn *) strcmp);
 3647|       |			wget_stringmap *set = wget_stringmap_create(start_len);
 3648|       |			for (int i = 0; i < start_len; i++) {
 3649|       |				const char *nxt = wget_vector_get(config.sig_ext, i);
 3650|       |				if (!wget_stringmap_contains(set, nxt)) {
 3651|       |					wget_vector_add(new_sig_ext, wget_strdup(nxt));
 3652|       |					wget_stringmap_put(set, wget_strdup(nxt), NULL);
 3653|       |				}
 3654|       |			}
 3655|       |
 3656|       |			wget_vector_free(&config.sig_ext);
 3657|       |			wget_stringmap_free(&set);
 3658|       |			config.sig_ext = new_sig_ext;
 3659|       |			new_sig_ext = NULL;
 3660|       |		}
 3661|       |#endif
 3662|      0|	}
 3663|       |
 3664|  9.50k|	if ((rc = wget_net_init())) {
  ------------------
  |  Branch (3664:6): [True: 0, False: 9.50k]
  ------------------
 3665|      0|		wget_error_printf(_("Failed to init networking (%d)"), rc);
  ------------------
  |  |   48|      0|#	define _(STRING) gettext(STRING)
  ------------------
 3666|      0|		return -1;
 3667|      0|	}
 3668|       |
 3669|  9.50k|	if ((rc = wget_dns_init(&dns))) {
  ------------------
  |  Branch (3669:6): [True: 0, False: 9.50k]
  ------------------
 3670|      0|		wget_error_printf(_("Failed to init DNS (%d)"), rc);
  ------------------
  |  |   48|      0|#	define _(STRING) gettext(STRING)
  ------------------
 3671|      0|		return -1;
 3672|      0|	}
 3673|  9.50k|	if (config.dns_caching) {
  ------------------
  |  Branch (3673:6): [True: 1.59k, False: 7.90k]
  ------------------
 3674|  1.59k|		if ((rc = wget_dns_cache_init(&dns_cache))) {
  ------------------
  |  Branch (3674:7): [True: 0, False: 1.59k]
  ------------------
 3675|      0|			wget_error_printf(_("Failed to init DNS cache (%d)"), rc);
  ------------------
  |  |   48|      0|#	define _(STRING) gettext(STRING)
  ------------------
 3676|      0|			return -1;
 3677|      0|		}
 3678|  1.59k|		wget_dns_set_cache(dns, dns_cache);
 3679|  1.59k|	}
 3680|  9.50k|	wget_dns_set_timeout(dns, config.dns_timeout);
 3681|  9.50k|	wget_tcp_set_dns(NULL, dns);
 3682|       |
 3683|  9.50k|	if (config.stats_dns_args) {
  ------------------
  |  Branch (3683:6): [True: 35, False: 9.46k]
  ------------------
 3684|     35|		config.stats_dns_args->fp =
 3685|     35|			config.stats_dns_args->filename && *config.stats_dns_args->filename && strcmp(config.stats_dns_args->filename, "-")
  ------------------
  |  Branch (3685:4): [True: 34, False: 1]
  |  Branch (3685:39): [True: 10, False: 24]
  |  Branch (3685:75): [True: 9, False: 1]
  ------------------
 3686|     35|			&& !config.dont_write ? fopen(config.stats_dns_args->filename, "w") : stdout;
  ------------------
  |  Branch (3686:7): [True: 0, False: 9]
  ------------------
 3687|     35|		if (!config.stats_dns_args->fp) {
  ------------------
  |  Branch (3687:7): [True: 0, False: 35]
  ------------------
 3688|      0|			wget_error_printf(_("Failed to open '%s' (%d)"), config.stats_dns_args->filename, rc);
  ------------------
  |  |   48|      0|#	define _(STRING) gettext(STRING)
  ------------------
 3689|      0|			return -1;
 3690|      0|		}
 3691|     35|		wget_dns_set_stats_callback(dns, stats_callback_dns, config.stats_dns_args->fp);
 3692|     35|	}
 3693|       |
 3694|  9.50k|	if (config.stats_ocsp_args) {
  ------------------
  |  Branch (3694:6): [True: 7, False: 9.49k]
  ------------------
 3695|      7|		config.stats_ocsp_args->fp =
 3696|      7|			config.stats_ocsp_args->filename && *config.stats_ocsp_args->filename && strcmp(config.stats_ocsp_args->filename, "-")
  ------------------
  |  Branch (3696:4): [True: 6, False: 1]
  |  Branch (3696:40): [True: 5, False: 1]
  |  Branch (3696:77): [True: 4, False: 1]
  ------------------
 3697|      7|			&& !config.dont_write ? fopen(config.stats_ocsp_args->filename, "w") : stdout;
  ------------------
  |  Branch (3697:7): [True: 0, False: 4]
  ------------------
 3698|      7|		if (!config.stats_ocsp_args->fp) {
  ------------------
  |  Branch (3698:7): [True: 0, False: 7]
  ------------------
 3699|      0|			wget_error_printf(_("Failed to open '%s' (%d)"), config.stats_ocsp_args->filename, rc);
  ------------------
  |  |   48|      0|#	define _(STRING) gettext(STRING)
  ------------------
 3700|      0|			return -1;
 3701|      0|		}
 3702|      7|		wget_ssl_set_stats_callback_ocsp(stats_callback_ocsp, config.stats_ocsp_args->fp);
 3703|      7|	}
 3704|       |
 3705|  9.50k|	if (config.stats_tls_args) {
  ------------------
  |  Branch (3705:6): [True: 30, False: 9.47k]
  ------------------
 3706|     30|		config.stats_tls_args->fp =
 3707|     30|			config.stats_tls_args->filename && *config.stats_tls_args->filename && strcmp(config.stats_tls_args->filename, "-")
  ------------------
  |  Branch (3707:4): [True: 29, False: 1]
  |  Branch (3707:39): [True: 8, False: 21]
  |  Branch (3707:75): [True: 7, False: 1]
  ------------------
 3708|     30|			&& !config.dont_write ? fopen(config.stats_tls_args->filename, "w") : stdout;
  ------------------
  |  Branch (3708:7): [True: 0, False: 7]
  ------------------
 3709|     30|		if (!config.stats_tls_args->fp) {
  ------------------
  |  Branch (3709:7): [True: 0, False: 30]
  ------------------
 3710|      0|			wget_error_printf(_("Failed to open '%s' (%d)"), config.stats_tls_args->filename, rc);
  ------------------
  |  |   48|      0|#	define _(STRING) gettext(STRING)
  ------------------
 3711|      0|			return -1;
 3712|      0|		}
 3713|     30|		wget_ssl_set_stats_callback_tls(stats_callback_tls, config.stats_tls_args->fp);
 3714|     30|	}
 3715|       |
 3716|  9.50k|	if (config.stats_server_args) {
  ------------------
  |  Branch (3716:6): [True: 8, False: 9.49k]
  ------------------
 3717|      8|		config.stats_server_args->fp =
 3718|      8|			config.stats_server_args->filename && *config.stats_server_args->filename && strcmp(config.stats_server_args->filename, "-")
  ------------------
  |  Branch (3718:4): [True: 7, False: 1]
  |  Branch (3718:42): [True: 4, False: 3]
  |  Branch (3718:81): [True: 3, False: 1]
  ------------------
 3719|      8|			&& !config.dont_write ? fopen(config.stats_server_args->filename, "w") : stdout;
  ------------------
  |  Branch (3719:7): [True: 0, False: 3]
  ------------------
 3720|      8|		if (!config.stats_server_args->fp) {
  ------------------
  |  Branch (3720:7): [True: 0, False: 8]
  ------------------
 3721|      0|			wget_error_printf(_("Failed to open '%s' (%d)"), config.stats_server_args->filename, rc);
  ------------------
  |  |   48|      0|#	define _(STRING) gettext(STRING)
  ------------------
 3722|      0|			return -1;
 3723|      0|		}
 3724|      8|		server_stats_init(config.stats_server_args->fp);
 3725|      8|	}
 3726|       |
 3727|  9.50k|	if (config.stats_site_args) {
  ------------------
  |  Branch (3727:6): [True: 15, False: 9.48k]
  ------------------
 3728|     15|		config.stats_site_args->fp =
 3729|     15|			config.stats_site_args->filename && *config.stats_site_args->filename && strcmp(config.stats_site_args->filename, "-")
  ------------------
  |  Branch (3729:4): [True: 14, False: 1]
  |  Branch (3729:40): [True: 9, False: 5]
  |  Branch (3729:77): [True: 8, False: 1]
  ------------------
 3730|     15|			&& !config.dont_write ? fopen(config.stats_site_args->filename, "w") : stdout;
  ------------------
  |  Branch (3730:7): [True: 0, False: 8]
  ------------------
 3731|     15|		if (!config.stats_site_args->fp) {
  ------------------
  |  Branch (3731:7): [True: 0, False: 15]
  ------------------
 3732|      0|			wget_error_printf(_("Failed to open '%s' (%d)"), config.stats_site_args->filename, rc);
  ------------------
  |  |   48|      0|#	define _(STRING) gettext(STRING)
  ------------------
 3733|      0|			return -1;
 3734|      0|		}
 3735|     15|		site_stats_init(config.stats_site_args->fp);
 3736|     15|	}
 3737|       |
 3738|       |	// set module specific options
 3739|  9.50k|	wget_tcp_set_timeout(NULL, config.read_timeout);
 3740|  9.50k|	wget_tcp_set_connect_timeout(NULL, config.connect_timeout);
 3741|  9.50k|	wget_tcp_set_tcp_fastopen(NULL, config.tcp_fastopen);
 3742|  9.50k|	wget_tcp_set_tls_false_start(NULL, config.tls_false_start);
 3743|  9.50k|	if (!config.dont_write) // fuzzing mode, try to avoid real network access
  ------------------
  |  Branch (3743:6): [True: 0, False: 9.50k]
  ------------------
 3744|      0|		wget_tcp_set_bind_address(NULL, config.bind_address);
 3745|  9.50k|	if (config.bind_interface)
  ------------------
  |  Branch (3745:6): [True: 1, False: 9.49k]
  ------------------
 3746|      1|		wget_tcp_set_bind_interface(NULL, config.bind_interface);
 3747|  9.50k|	if (config.inet4_only)
  ------------------
  |  Branch (3747:6): [True: 1.85k, False: 7.64k]
  ------------------
 3748|  1.85k|		wget_tcp_set_family(NULL, WGET_NET_FAMILY_IPV4);
  ------------------
  |  | 1883|  1.85k|#define WGET_NET_FAMILY_IPV4 1
  ------------------
 3749|  7.64k|	else if (config.inet6_only)
  ------------------
  |  Branch (3749:11): [True: 0, False: 7.64k]
  ------------------
 3750|      0|		wget_tcp_set_family(NULL, WGET_NET_FAMILY_IPV6);
  ------------------
  |  | 1884|      0|#define WGET_NET_FAMILY_IPV6 2
  ------------------
 3751|  7.64k|	else
 3752|  7.64k|		wget_tcp_set_preferred_family(NULL, config.preferred_family);
 3753|       |
 3754|  9.50k|	wget_iri_set_defaultpage(config.default_page);
 3755|       |
 3756|       |	// SSL settings
 3757|  9.50k|	wget_ssl_set_config_int(WGET_SSL_CHECK_CERTIFICATE, config.check_certificate == CHECK_CERTIFICATE_ENABLED);
  ------------------
  |  | 1986|  9.50k|#define WGET_SSL_CHECK_CERTIFICATE 9
  ------------------
 3758|  9.50k|	wget_ssl_set_config_int(WGET_SSL_REPORT_INVALID_CERT, config.check_certificate != CHECK_CERTIFICATE_LOG_DISABLED);
  ------------------
  |  | 1999|  9.50k|#define WGET_SSL_REPORT_INVALID_CERT 23
  ------------------
 3759|  9.50k|	wget_ssl_set_config_int(WGET_SSL_CHECK_HOSTNAME, config.check_hostname);
  ------------------
  |  | 1987|  9.50k|#define WGET_SSL_CHECK_HOSTNAME    10
  ------------------
 3760|  9.50k|	wget_ssl_set_config_int(WGET_SSL_CERT_TYPE, config.cert_type);
  ------------------
  |  | 1984|  9.50k|#define WGET_SSL_CERT_TYPE         7
  ------------------
 3761|       |#ifdef WITH_LIBDANE
 3762|       |	wget_ssl_set_config_int(WGET_SSL_DANE, config.dane);
 3763|       |#endif
 3764|  9.50k|	wget_ssl_set_config_int(WGET_SSL_KEY_TYPE, config.private_key_type);
  ------------------
  |  | 1985|  9.50k|#define WGET_SSL_KEY_TYPE          8
  ------------------
 3765|  9.50k|	wget_ssl_set_config_int(WGET_SSL_PRINT_INFO, config.debug);
  ------------------
  |  | 1988|  9.50k|#define WGET_SSL_PRINT_INFO        11
  ------------------
 3766|  9.50k|	wget_ssl_set_config_int(WGET_SSL_OCSP, config.ocsp);
  ------------------
  |  | 1992|  9.50k|#define WGET_SSL_OCSP              16
  ------------------
 3767|  9.50k|#ifndef WITH_LIBWOLFCRYPT
 3768|  9.50k|	wget_ssl_set_config_int(WGET_SSL_OCSP_DATE, config.ocsp_date);
  ------------------
  |  | 1998|  9.50k|#define WGET_SSL_OCSP_DATE         22
  ------------------
 3769|  9.50k|	wget_ssl_set_config_int(WGET_SSL_OCSP_NONCE, config.ocsp_nonce);
  ------------------
  |  | 1997|  9.50k|#define WGET_SSL_OCSP_NONCE        21
  ------------------
 3770|  9.50k|#endif
 3771|  9.50k|	wget_ssl_set_config_int(WGET_SSL_OCSP_STAPLING, config.ocsp_stapling);
  ------------------
  |  | 1990|  9.50k|#define WGET_SSL_OCSP_STAPLING     14
  ------------------
 3772|  9.50k|	wget_ssl_set_config_string(WGET_SSL_OCSP_SERVER, config.ocsp_server);
  ------------------
  |  | 1991|  9.50k|#define WGET_SSL_OCSP_SERVER       15
  ------------------
 3773|  9.50k|	wget_ssl_set_config_string(WGET_SSL_SECURE_PROTOCOL, config.secure_protocol);
  ------------------
  |  | 1978|  9.50k|#define WGET_SSL_SECURE_PROTOCOL   1
  ------------------
 3774|  9.50k|	wget_ssl_set_config_string(WGET_SSL_CA_DIRECTORY, config.ca_directory);
  ------------------
  |  | 1979|  9.50k|#define WGET_SSL_CA_DIRECTORY      2
  ------------------
 3775|  9.50k|	wget_ssl_set_config_string(WGET_SSL_CA_FILE, config.ca_cert);
  ------------------
  |  | 1980|  9.50k|#define WGET_SSL_CA_FILE           3
  ------------------
 3776|  9.50k|	wget_ssl_set_config_string(WGET_SSL_CERT_FILE, config.cert_file);
  ------------------
  |  | 1981|  9.50k|#define WGET_SSL_CERT_FILE         4
  ------------------
 3777|  9.50k|	wget_ssl_set_config_string(WGET_SSL_KEY_FILE, config.private_key);
  ------------------
  |  | 1982|  9.50k|#define WGET_SSL_KEY_FILE          5
  ------------------
 3778|  9.50k|	wget_ssl_set_config_string(WGET_SSL_CRL_FILE, config.crl_file);
  ------------------
  |  | 1989|  9.50k|#define WGET_SSL_CRL_FILE          13
  ------------------
 3779|  9.50k|	wget_ssl_set_config_object(WGET_SSL_OCSP_CACHE, config.ocsp_db);
  ------------------
  |  | 1993|  9.50k|#define WGET_SSL_OCSP_CACHE        17
  ------------------
 3780|       |#ifdef WITH_LIBNGHTTP2
 3781|       |	if (config.http2_only)
 3782|       |		wget_ssl_set_config_string(WGET_SSL_ALPN, config.http2 ? "h2" : NULL);
 3783|       |	else
 3784|       |		wget_ssl_set_config_string(WGET_SSL_ALPN, config.http2 ? "h2,http/1.1" : NULL);
 3785|       |#endif
 3786|  9.50k|	wget_ssl_set_config_object(WGET_SSL_SESSION_CACHE, config.tls_session_db);
  ------------------
  |  | 1995|  9.50k|#define WGET_SSL_SESSION_CACHE     19
  ------------------
 3787|  9.50k|	wget_ssl_set_config_object(WGET_SSL_HPKP_CACHE, config.hpkp_db);
  ------------------
  |  | 1996|  9.50k|#define WGET_SSL_HPKP_CACHE        20
  ------------------
 3788|       |
 3789|       |	// convert host lists to lowercase
 3790|  33.0k|	for (int it = 0; it < wget_vector_size(config.domains); it++) {
  ------------------
  |  Branch (3790:19): [True: 23.5k, False: 9.50k]
  ------------------
 3791|  23.5k|		char *s, *hostname = wget_vector_get(config.domains, it);
 3792|       |
 3793|  23.5k|		wget_percent_unescape(hostname);
 3794|       |
 3795|  23.5k|		if (wget_str_needs_encoding(hostname)) {
  ------------------
  |  Branch (3795:7): [True: 18.1k, False: 5.35k]
  ------------------
 3796|  18.1k|			if ((s = wget_str_to_utf8(hostname, config.local_encoding))) {
  ------------------
  |  Branch (3796:8): [True: 4.15k, False: 13.9k]
  ------------------
 3797|  4.15k|				wget_vector_replace(config.domains, s, it);
 3798|  4.15k|				hostname = s;
 3799|  4.15k|			}
 3800|       |
 3801|  18.1k|			if ((s = (char *)wget_str_to_ascii(hostname)) != hostname)
  ------------------
  |  Branch (3801:8): [True: 8.45k, False: 9.69k]
  ------------------
 3802|  8.45k|				wget_vector_replace(config.domains, s, it);
 3803|  18.1k|		} else
 3804|  5.35k|			wget_strtolower(hostname);
 3805|  23.5k|	}
 3806|       |
 3807|  10.3k|	for (int it = 0; it < wget_vector_size(config.exclude_domains); it++) {
  ------------------
  |  Branch (3807:19): [True: 875, False: 9.50k]
  ------------------
 3808|    875|		char *s, *hostname = wget_vector_get(config.exclude_domains, it);
 3809|       |
 3810|    875|		wget_percent_unescape(hostname);
 3811|       |
 3812|    875|		if (wget_str_needs_encoding(hostname)) {
  ------------------
  |  Branch (3812:7): [True: 658, False: 217]
  ------------------
 3813|    658|			if ((s = wget_str_to_utf8(hostname, config.local_encoding))) {
  ------------------
  |  Branch (3813:8): [True: 209, False: 449]
  ------------------
 3814|    209|				wget_vector_replace(config.exclude_domains, s, it);
 3815|    209|				hostname = s;
 3816|    209|			}
 3817|       |
 3818|    658|			if ((s = (char *)wget_str_to_ascii(hostname)) != hostname)
  ------------------
  |  Branch (3818:8): [True: 416, False: 242]
  ------------------
 3819|    416|				wget_vector_replace(config.exclude_domains, s, it);
 3820|    658|		} else
 3821|    217|			wget_strtolower(hostname);
 3822|    875|	}
 3823|       |
 3824|  9.50k|	if (config.dns_cache_preload)
  ------------------
  |  Branch (3824:6): [True: 5.30k, False: 4.19k]
  ------------------
 3825|  5.30k|		preload_dns_cache(config.dns_cache_preload);
 3826|       |
 3827|  9.50k|	return n;
 3828|  9.50k|}
deinit:
 3834|  9.59k|{
 3835|  9.59k|	wget_global_deinit();
 3836|       |
 3837|       |	// Free the home directories
 3838|  9.59k|	get_home_dir(true);
 3839|  9.59k|	get_xdg_config_home(NULL);
 3840|  9.59k|	get_xdg_data_home(NULL);
 3841|       |
 3842|  9.59k|	wget_dns_free(&dns);
 3843|  9.59k|	wget_dns_cache_free(&dns_cache);
 3844|       |
 3845|  9.59k|	wget_cookie_db_free(&config.cookie_db);
 3846|  9.59k|	wget_hsts_db_free(&config.hsts_db);
 3847|  9.59k|	wget_hpkp_db_free(&config.hpkp_db);
 3848|  9.59k|	wget_tls_session_db_free(&config.tls_session_db);
 3849|  9.59k|	wget_ocsp_db_free(&config.ocsp_db);
 3850|  9.59k|	wget_netrc_db_free(&config.netrc_db);
 3851|       |
 3852|  9.59k|	xfree(config.accept_regex);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3853|  9.59k|	xfree(config.base_url);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 2.44k, False: 7.14k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3854|  9.59k|	xfree(config.bind_address);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3855|  9.59k|	xfree(config.bind_interface);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3856|  9.59k|	xfree(config.body_data);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3857|  9.59k|	xfree(config.body_file);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3858|  9.59k|	xfree(config.ca_cert);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3859|  9.59k|	xfree(config.ca_directory);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3860|  9.59k|	xfree(config.cert_file);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3861|  9.59k|	xfree(config.cookie_suffixes);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3862|  9.59k|	xfree(config.crl_file);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3863|  9.59k|	xfree(config.default_page);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3864|  9.59k|	xfree(config.directory_prefix);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3865|  9.59k|	xfree(config.egd_file);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3866|  9.59k|	xfree(config.hsts_file);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 2, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3867|  9.59k|	xfree(config.hpkp_file);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 4, False: 9.58k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3868|  9.59k|	xfree(config.http_password);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 4, False: 9.58k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3869|  9.59k|	xfree(config.http_proxy);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 88, False: 9.50k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3870|  9.59k|	xfree(config.http_proxy_password);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 4, False: 9.58k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3871|  9.59k|	xfree(config.http_proxy_username);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 9, False: 9.58k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3872|  9.59k|	xfree(config.http_username);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 8, False: 9.58k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3873|  9.59k|	xfree(config.https_proxy);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3874|  9.59k|	xfree(config.hsts_preload_file);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3875|  9.59k|	xfree(config.input_encoding);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 9.58k, False: 3]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3876|  9.59k|	xfree(config.input_file);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 6, False: 9.58k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3877|  9.59k|	xfree(config.load_cookies);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 2, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3878|  9.59k|	xfree(config.local_encoding);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 9.58k, False: 3]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3879|  9.59k|	xfree(config.logfile);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 6, False: 9.58k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3880|  9.59k|	xfree(config.logfile_append);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3881|  9.59k|	xfree(config.method);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3882|  9.59k|	xfree(config.hostname);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 7.79k, False: 1.79k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3883|  9.59k|	xfree(config.netrc_file);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 8.56k, False: 1.03k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3884|  9.59k|	xfree(config.ocsp_file);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3885|  9.59k|	xfree(config.ocsp_server);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3886|  9.59k|	xfree(config.output_document);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 3, False: 9.58k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3887|  9.59k|	xfree(config.password);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 3, False: 9.58k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3888|  9.59k|	xfree(config.post_data);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3889|  9.59k|	xfree(config.post_file);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3890|  9.59k|	xfree(config.private_key);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3891|  9.59k|	xfree(config.random_file);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3892|  9.59k|	xfree(config.referer);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3893|  9.59k|	xfree(config.reject_regex);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3894|  9.59k|	xfree(config.remote_encoding);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3895|  9.59k|	xfree(config.save_cookies);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3896|  9.59k|	xfree(config.secure_protocol);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3897|  9.59k|	xfree(config.tls_session_file);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3898|  9.59k|	xfree(config.user_agent);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3899|  9.59k|	xfree(config.use_askpass_bin);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3900|  9.59k|	xfree(config.username);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 4, False: 9.58k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3901|  9.59k|	xfree(config.gnupg_homedir);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 0, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3902|  9.59k|	xfree(config.stats_all);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 0, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3903|  9.59k|	xfree(config.user_config);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 9.59k, False: 0]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3904|  9.59k|	xfree(config.system_config);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 0, False: 9.59k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3905|       |
 3906|  9.59k|	if (config.stats_dns_args) {
  ------------------
  |  Branch (3906:6): [True: 36, False: 9.55k]
  ------------------
 3907|     36|		if (config.stats_dns_args->fp && config.stats_dns_args->fp != stdout)
  ------------------
  |  Branch (3907:7): [True: 35, False: 1]
  |  Branch (3907:36): [True: 0, False: 35]
  ------------------
 3908|      0|			fclose(config.stats_dns_args->fp);
 3909|     36|		xfree(config.stats_dns_args->filename);
  ------------------
  |  |   61|     36|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 35, False: 1]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3910|     36|		xfree(config.stats_dns_args);
  ------------------
  |  |   61|     36|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 36, False: 0]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3911|     36|	}
 3912|       |
 3913|  9.59k|	if (config.stats_ocsp_args) {
  ------------------
  |  Branch (3913:6): [True: 8, False: 9.58k]
  ------------------
 3914|      8|		if (config.stats_ocsp_args->fp && config.stats_ocsp_args->fp != stdout)
  ------------------
  |  Branch (3914:7): [True: 7, False: 1]
  |  Branch (3914:37): [True: 0, False: 7]
  ------------------
 3915|      0|			fclose(config.stats_ocsp_args->fp);
 3916|      8|		xfree(config.stats_ocsp_args->filename);
  ------------------
  |  |   61|      8|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 7, False: 1]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3917|      8|		xfree(config.stats_ocsp_args);
  ------------------
  |  |   61|      8|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 8, False: 0]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3918|      8|	}
 3919|       |
 3920|  9.59k|	if (config.stats_server_args) {
  ------------------
  |  Branch (3920:6): [True: 9, False: 9.58k]
  ------------------
 3921|      9|		if (config.stats_server_args->fp)
  ------------------
  |  Branch (3921:7): [True: 8, False: 1]
  ------------------
 3922|      8|			server_stats_exit();
 3923|      9|		if (config.stats_server_args->fp && config.stats_server_args->fp != stdout)
  ------------------
  |  Branch (3923:7): [True: 8, False: 1]
  |  Branch (3923:39): [True: 0, False: 8]
  ------------------
 3924|      0|			fclose(config.stats_server_args->fp);
 3925|      9|		xfree(config.stats_server_args->filename);
  ------------------
  |  |   61|      9|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 8, False: 1]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3926|      9|		xfree(config.stats_server_args);
  ------------------
  |  |   61|      9|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 9, False: 0]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3927|      9|	}
 3928|       |
 3929|  9.59k|	if (config.stats_site_args) {
  ------------------
  |  Branch (3929:6): [True: 16, False: 9.57k]
  ------------------
 3930|     16|		if (config.stats_site_args->fp)
  ------------------
  |  Branch (3930:7): [True: 15, False: 1]
  ------------------
 3931|     15|			site_stats_exit();
 3932|     16|		if (config.stats_site_args->fp && config.stats_site_args->fp != stdout)
  ------------------
  |  Branch (3932:7): [True: 15, False: 1]
  |  Branch (3932:37): [True: 0, False: 15]
  ------------------
 3933|      0|			fclose(config.stats_site_args->fp);
 3934|     16|		xfree(config.stats_site_args->filename);
  ------------------
  |  |   61|     16|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 15, False: 1]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3935|     16|		xfree(config.stats_site_args);
  ------------------
  |  |   61|     16|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 16, False: 0]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3936|     16|	}
 3937|       |
 3938|  9.59k|	if (config.stats_tls_args) {
  ------------------
  |  Branch (3938:6): [True: 31, False: 9.56k]
  ------------------
 3939|     31|		if (config.stats_tls_args->fp && config.stats_tls_args->fp != stdout)
  ------------------
  |  Branch (3939:7): [True: 30, False: 1]
  |  Branch (3939:36): [True: 0, False: 30]
  ------------------
 3940|      0|			fclose(config.stats_tls_args->fp);
 3941|     31|		xfree(config.stats_tls_args->filename);
  ------------------
  |  |   61|     31|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 30, False: 1]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3942|     31|		xfree(config.stats_tls_args);
  ------------------
  |  |   61|     31|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 31, False: 0]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3943|     31|	}
 3944|       |
 3945|  9.59k|	wget_iri_free(&config.base);
 3946|       |
 3947|  9.59k|	wget_vector_free(&config.exclude_directories);
 3948|  9.59k|	wget_vector_free(&config.save_content_on);
 3949|  9.59k|	wget_vector_free(&config.mime_types);
 3950|  9.59k|	wget_vector_free(&config.retry_on_http_error);
 3951|  9.59k|	wget_vector_free(&config.domains);
 3952|  9.59k|	wget_vector_free(&config.exclude_domains);
 3953|  9.59k|	wget_vector_free(&config.follow_tags);
 3954|  9.59k|	wget_vector_free(&config.ignore_tags);
 3955|  9.59k|	wget_vector_free(&config.accept_patterns);
 3956|  9.59k|	wget_vector_free(&config.reject_patterns);
 3957|  9.59k|	wget_vector_free(&config.headers);
 3958|  9.59k|	wget_vector_free(&config.default_challenges);
 3959|  9.59k|	wget_vector_free(&config.compression);
 3960|       |#ifdef WITH_GPGME
 3961|       |	wget_vector_free(&config.sig_ext);
 3962|       |#endif
 3963|  9.59k|	wget_http_set_http_proxy(NULL, NULL);
 3964|  9.59k|	wget_http_set_https_proxy(NULL, NULL);
 3965|  9.59k|	wget_http_set_no_proxy(NULL, NULL);
 3966|       |
 3967|       |
 3968|       |#ifdef WITH_LIBHSTS
 3969|       |	hsts_free(config.hsts_preload_data);
 3970|       |	config.hsts_preload_data = NULL;
 3971|       |#endif
 3972|  9.59k|}
options.c:set_long_option:
 2573|   124k|{
 2574|   124k|	option_t opt;
 2575|   124k|	char invert = 0, value_present = 0, case_insensitive = 1;
 2576|   124k|	char namebuf[sizeof(options[0].long_name) + 5], *p;
 2577|   124k|	int ret = 0, rc;
 2578|       |
 2579|   124k|	if ((p = strchr(name, '='))) {
  ------------------
  |  Branch (2579:6): [True: 737, False: 123k]
  ------------------
 2580|       |		// option with appended value
 2581|    737|		if (p - name >= (int) sizeof(namebuf)) {
  ------------------
  |  Branch (2581:7): [True: 3, False: 734]
  ------------------
 2582|      3|			error_printf(_("Unknown option '%s'\n"), name);
  ------------------
  |  |   55|      3|#define error_printf  wget_error_printf
  ------------------
              			error_printf(_("Unknown option '%s'\n"), name);
  ------------------
  |  |   48|      3|#	define _(STRING) gettext(STRING)
  ------------------
 2583|      3|			return -1;
 2584|      3|		}
 2585|    734|		memcpy(namebuf, name, p - name);
 2586|    734|		namebuf[p - name] = 0;
 2587|    734|		name = namebuf;
 2588|    734|		value = p + 1;
 2589|    734|		value_present = 1;
 2590|    734|	}
 2591|       |
 2592|       |	// If the option is  passed from .wget2rc (--*), delete the "--" prefix
 2593|   124k|	if (!strncmp(name, "--", 2)) {
  ------------------
  |  Branch (2593:6): [True: 310, False: 123k]
  ------------------
 2594|    310|		case_insensitive = 0;
 2595|    310|		name += 2;
 2596|    310|	}
 2597|       |	// If the option is negated (--no-) delete the "no-" prefix
 2598|   124k|	if (!strncmp(name, "no-", 3)) {
  ------------------
  |  Branch (2598:6): [True: 43.0k, False: 81.2k]
  ------------------
 2599|  43.0k|		invert = 1;
 2600|  43.0k|		name += 3;
 2601|  43.0k|	}
 2602|       |
 2603|   124k|	if (parsing_config && case_insensitive) {
  ------------------
  |  Branch (2603:6): [True: 59.2k, False: 65.0k]
  |  Branch (2603:24): [True: 58.9k, False: 290]
  ------------------
 2604|  58.9k|		opt = bsearch(name, options, countof(options), sizeof(options[0]), opt_compare_config);
  ------------------
  |  |   64|  58.9k|#define countof(a) (sizeof(a)/sizeof(*(a)))
  ------------------
 2605|  58.9k|		if (!opt) {
  ------------------
  |  Branch (2605:7): [True: 13.5k, False: 45.3k]
  ------------------
 2606|       |			// Fallback to linear search for 'unsharp' searching.
 2607|       |			// Maybe the user asked for e.g. https_only or httpsonly instead of https-only
 2608|       |			// opt_compare_config_linear() will find these. Wget -e/--execute compatibility.
 2609|  1.27M|			for (unsigned it = 0; it < countof(options) && !opt; it++)
  ------------------
  |  |   64|  2.54M|#define countof(a) (sizeof(a)/sizeof(*(a)))
  ------------------
  |  Branch (2609:26): [True: 1.27M, False: 233]
  |  Branch (2609:51): [True: 1.26M, False: 13.3k]
  ------------------
 2610|  1.26M|				if (opt_compare_config_linear(name, options[it].long_name) == 0)
  ------------------
  |  Branch (2610:9): [True: 13.3k, False: 1.24M]
  ------------------
 2611|  13.3k|					opt = &options[it];
 2612|  13.5k|		}
 2613|  58.9k|	} else
 2614|  65.3k|		opt = bsearch(name, options, countof(options), sizeof(options[0]), opt_compare);
  ------------------
  |  |   64|  65.3k|#define countof(a) (sizeof(a)/sizeof(*(a)))
  ------------------
 2615|       |
 2616|   124k|	if (!opt) {
  ------------------
  |  Branch (2616:6): [True: 1.06k, False: 123k]
  ------------------
 2617|  1.06k|		error_printf(_("Unknown option '%s'\n"), name);
  ------------------
  |  |   55|  1.06k|#define error_printf  wget_error_printf
  ------------------
              		error_printf(_("Unknown option '%s'\n"), name);
  ------------------
  |  |   48|  1.06k|#	define _(STRING) gettext(STRING)
  ------------------
 2618|  1.06k|		return -1;
 2619|  1.06k|	}
 2620|       |
 2621|   123k|	debug_printf("name=%s value=%s invert=%d\n", opt->long_name, value, invert);
  ------------------
  |  |   57|   123k|#define debug_printf wget_debug_printf
  ------------------
 2622|       |
 2623|   123k|	if (value_present) {
  ------------------
  |  Branch (2623:6): [True: 727, False: 122k]
  ------------------
 2624|       |		// "option=*"
 2625|    727|		if (invert) {
  ------------------
  |  Branch (2625:7): [True: 216, False: 511]
  ------------------
 2626|    216|			if (!opt->args ||
  ------------------
  |  Branch (2626:8): [True: 1, False: 215]
  ------------------
 2627|    216|				opt->parser == parse_string ||
  ------------------
  |  Branch (2627:5): [True: 1, False: 214]
  ------------------
 2628|    216|				opt->parser == parse_stringset ||
  ------------------
  |  Branch (2628:5): [True: 0, False: 214]
  ------------------
 2629|    216|				opt->parser == parse_stringlist ||
  ------------------
  |  Branch (2629:5): [True: 1, False: 213]
  ------------------
 2630|    216|				opt->parser == parse_filename ||
  ------------------
  |  Branch (2630:5): [True: 1, False: 212]
  ------------------
 2631|    216|				opt->parser == parse_filenames ||
  ------------------
  |  Branch (2631:5): [True: 0, False: 212]
  ------------------
 2632|    216|				opt->parser == parse_stats)
  ------------------
  |  Branch (2632:5): [True: 1, False: 211]
  ------------------
 2633|      5|			{
 2634|      5|				error_printf(_("Option 'no-%s' doesn't allow an argument\n"), name);
  ------------------
  |  |   55|      5|#define error_printf  wget_error_printf
  ------------------
              				error_printf(_("Option 'no-%s' doesn't allow an argument\n"), name);
  ------------------
  |  |   48|      5|#	define _(STRING) gettext(STRING)
  ------------------
 2635|      5|				return -1;
 2636|      5|			}
 2637|    511|		} else if (!opt->args) {
  ------------------
  |  Branch (2637:14): [True: 1, False: 510]
  ------------------
 2638|      1|			error_printf(_("Option '%s' doesn't allow an argument\n"), name);
  ------------------
  |  |   55|      1|#define error_printf  wget_error_printf
  ------------------
              			error_printf(_("Option '%s' doesn't allow an argument\n"), name);
  ------------------
  |  |   48|      1|#	define _(STRING) gettext(STRING)
  ------------------
 2639|      1|			return -1;
 2640|      1|		}
 2641|   122k|	} else {
 2642|       |		// "option"
 2643|   122k|		switch (opt->args) {
 2644|     18|		case 0:
  ------------------
  |  Branch (2644:3): [True: 18, False: 122k]
  ------------------
 2645|     18|			value = NULL;
 2646|     18|			break;
 2647|  87.7k|		case 1:
  ------------------
  |  Branch (2647:3): [True: 87.7k, False: 34.6k]
  ------------------
 2648|  87.7k|			if (!value) {
  ------------------
  |  Branch (2648:8): [True: 5, False: 87.7k]
  ------------------
 2649|      5|				error_printf(_("Missing argument for option '%s'\n"), name);
  ------------------
  |  |   55|      5|#define error_printf  wget_error_printf
  ------------------
              				error_printf(_("Missing argument for option '%s'\n"), name);
  ------------------
  |  |   48|      5|#	define _(STRING) gettext(STRING)
  ------------------
 2650|       |				// empty string is allowed in value i.e. *value = '\0'
 2651|      5|				return -1;
 2652|      5|			}
 2653|       |
 2654|  87.7k|			if (invert && (
  ------------------
  |  Branch (2654:8): [True: 21.6k, False: 66.0k]
  ------------------
 2655|  21.6k|				opt->parser == parse_string ||
  ------------------
  |  Branch (2655:5): [True: 916, False: 20.7k]
  ------------------
 2656|  21.6k|				opt->parser == parse_stringset ||
  ------------------
  |  Branch (2656:5): [True: 0, False: 20.7k]
  ------------------
 2657|  21.6k|				opt->parser == parse_stringlist ||
  ------------------
  |  Branch (2657:5): [True: 210, False: 20.5k]
  ------------------
 2658|  21.6k|				opt->parser == parse_filename ||
  ------------------
  |  Branch (2658:5): [True: 19.3k, False: 1.19k]
  ------------------
 2659|  21.6k|				opt->parser == parse_filenames ||
  ------------------
  |  Branch (2659:5): [True: 0, False: 1.19k]
  ------------------
 2660|  21.6k|				opt->parser == parse_stats))
  ------------------
  |  Branch (2660:5): [True: 420, False: 773]
  ------------------
 2661|  20.9k|			{
 2662|  20.9k|				value = NULL;
 2663|  20.9k|			} else
 2664|  66.8k|				ret = opt->args;
 2665|  87.7k|			break;
 2666|  34.6k|		case -1:
  ------------------
  |  Branch (2666:3): [True: 34.6k, False: 87.8k]
  ------------------
 2667|  34.6k|			if (!parsing_config)
  ------------------
  |  Branch (2667:8): [True: 25.7k, False: 8.82k]
  ------------------
 2668|  25.7k|				value = NULL;
 2669|  8.82k|			else if (value)
  ------------------
  |  Branch (2669:13): [True: 8.61k, False: 210]
  ------------------
 2670|  8.61k|				ret = 1;
 2671|  34.6k|			break;
 2672|      0|		default:
  ------------------
  |  Branch (2672:3): [True: 0, False: 122k]
  ------------------
 2673|      0|			break;
 2674|   122k|		}
 2675|   122k|	}
 2676|       |
 2677|   123k|	if ((rc = opt->parser(opt, value, invert)) < 0)
  ------------------
  |  Branch (2677:6): [True: 1.46k, False: 121k]
  ------------------
 2678|  1.46k|		return rc;
 2679|       |
 2680|   121k|	return ret;
 2681|   123k|}
options.c:parse_string:
  375|  7.99k|{
  376|       |	// the strdup'ed string will be released on program exit
  377|  7.99k|	xfree(*((const char **)opt->var));
  ------------------
  |  |   61|  7.99k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 3.81k, False: 4.17k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  378|  7.99k|	*((const char **)opt->var) = wget_strdup(val);
  379|       |
  380|  7.99k|	return 0;
  381|  7.99k|}
options.c:parse_stringlist:
  534|  11.8k|{
  535|       |	/* max number of 1024 entries to avoid out-of-memory */
  536|  11.8k|	return parse_stringlist_expand(opt, val, 0, 1024);
  537|  11.8k|}
options.c:parse_stringlist_expand:
  502|  15.2k|{
  503|  15.2k|	if (val && *val) {
  ------------------
  |  Branch (503:6): [True: 14.5k, False: 680]
  |  Branch (503:13): [True: 10.2k, False: 4.33k]
  ------------------
  504|  10.2k|		wget_vector *v = *((wget_vector **)opt->var);
  505|  10.2k|		const char *s, *p;
  506|       |
  507|  10.2k|		if (!v)
  ------------------
  |  Branch (507:7): [True: 4.17k, False: 6.08k]
  ------------------
  508|  4.17k|			v = *((wget_vector **)opt->var) = wget_vector_create(8, (wget_vector_compare_fn *) strcmp);
  509|       |
  510|  59.9k|		for (s = p = val; *p; s = p + 1) {
  ------------------
  |  Branch (510:21): [True: 49.7k, False: 10.2k]
  ------------------
  511|  49.7k|			if ((p = strchrnul_esc(s, ',')) != s) {
  ------------------
  |  Branch (511:8): [True: 46.7k, False: 3.00k]
  ------------------
  512|  46.7k|				if (wget_vector_size(v) >= max_entries) {
  ------------------
  |  Branch (512:9): [True: 19, False: 46.6k]
  ------------------
  513|     19|					wget_debug_printf("%s: More than %d entries, ignoring overflow\n", __func__, max_entries);
  514|     19|					return -1;
  515|     19|				}
  516|       |
  517|  46.6k|				const char *fname = strmemdup_esc(s, p - s);
  518|       |
  519|  46.6k|				if (expand && *s == '~') {
  ------------------
  |  Branch (519:9): [True: 0, False: 46.6k]
  |  Branch (519:19): [True: 0, False: 0]
  ------------------
  520|      0|					wget_vector_add(v, shell_expand(fname));
  521|      0|					xfree(fname);
  ------------------
  |  |   61|      0|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 0, False: 0]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  522|      0|				} else
  523|  46.6k|					wget_vector_add(v, fname);
  524|  46.6k|			}
  525|  49.7k|		}
  526|  10.2k|	} else {
  527|  5.01k|		wget_vector_free(opt->var);
  528|  5.01k|	}
  529|       |
  530|  15.2k|	return 0;
  531|  15.2k|}
options.c:strchrnul_esc:
  458|  49.7k|{
  459|  49.7k|	const char *p;
  460|       |
  461|   307k|	for (p = s; *p; p++) {
  ------------------
  |  Branch (461:14): [True: 296k, False: 10.2k]
  ------------------
  462|   296k|		if (*p == '\\' && (p[1] == '\\' || p[1] == c))
  ------------------
  |  Branch (462:7): [True: 2.30k, False: 294k]
  |  Branch (462:22): [True: 496, False: 1.81k]
  |  Branch (462:38): [True: 536, False: 1.27k]
  ------------------
  463|  1.03k|			p++;
  464|   295k|		else if (*p == c)
  ------------------
  |  Branch (464:12): [True: 39.4k, False: 256k]
  ------------------
  465|  39.4k|			return p;
  466|   296k|	}
  467|       |
  468|  10.2k|	return p; // pointer to trailing \0
  469|  49.7k|}
options.c:strmemdup_esc:
  472|  46.6k|{
  473|  46.6k|   const char *p, *e;
  474|  46.6k|	size_t newsize = 0;
  475|       |
  476|   303k|	for (p = s, e = s + size; p < e; p++) {
  ------------------
  |  Branch (476:28): [True: 256k, False: 46.6k]
  ------------------
  477|   256k|		if (*p == '\\') {
  ------------------
  |  Branch (477:7): [True: 2.30k, False: 254k]
  ------------------
  478|  2.30k|			if (p < e - 1) {
  ------------------
  |  Branch (478:8): [True: 1.47k, False: 832]
  ------------------
  479|  1.47k|				newsize++;
  480|  1.47k|				p++;
  481|  1.47k|			}
  482|  2.30k|		} else
  483|   254k|			newsize++;
  484|   256k|	}
  485|       |
  486|  46.6k|	char *ret = wget_malloc(newsize + 1);
  487|  46.6k|	char *dst = ret;
  488|       |
  489|   303k|	for (p = s, e = s + size; p < e; p++) {
  ------------------
  |  Branch (489:28): [True: 256k, False: 46.6k]
  ------------------
  490|   256k|		if (*p == '\\') {
  ------------------
  |  Branch (490:7): [True: 2.30k, False: 254k]
  ------------------
  491|  2.30k|			if (p < e - 1)
  ------------------
  |  Branch (491:8): [True: 1.47k, False: 832]
  ------------------
  492|  1.47k|				*dst++ = *++p;
  493|  2.30k|		} else
  494|   254k|			*dst++ = *p;
  495|   256k|	}
  496|  46.6k|	*dst = 0;
  497|       |
  498|  46.6k|	return ret;
  499|  46.6k|}
options.c:parse_filename:
  366|  42.7k|{
  367|  42.7k|	xfree(*((const char **)opt->var));
  ------------------
  |  |   61|  42.7k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 13.7k, False: 28.9k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  368|  42.7k|	*((const char **)opt->var) = val ? shell_expand(val) : NULL;
  ------------------
  |  Branch (368:31): [True: 23.3k, False: 19.3k]
  ------------------
  369|       |
  370|  42.7k|	debug_printf("Expanded value = %s\n", *(const char **)opt->var);
  ------------------
  |  |   57|  42.7k|#define debug_printf wget_debug_printf
  ------------------
  371|  42.7k|	return 0;
  372|  42.7k|}
options.c:parse_stats:
  931|  1.51k|{
  932|  1.51k|	const char *p;
  933|  1.51k|	wget_stats_format format;
  934|       |
  935|  1.51k|	stats_args **stats = (stats_args **) opt->var;
  936|  1.51k|	if (*stats)
  ------------------
  |  Branch (936:6): [True: 957, False: 557]
  ------------------
  937|    957|		xfree((*stats)->filename);
  ------------------
  |  |   61|    957|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 957, False: 0]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  938|       |
  939|  1.51k|	if (invert) {
  ------------------
  |  Branch (939:6): [True: 420, False: 1.09k]
  ------------------
  940|    420|		xfree(*stats);
  ------------------
  |  |   61|    420|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 210, False: 210]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  941|    420|		return 0;
  942|    420|	}
  943|       |
  944|  1.09k|	if (val && (p = strchr(val, ':'))) {
  ------------------
  |  Branch (944:6): [True: 1.09k, False: 0]
  |  Branch (944:13): [True: 483, False: 611]
  ------------------
  945|    483|		if (!wget_strncasecmp_ascii("human", val, p - val) || !wget_strncasecmp_ascii("h", val, p - val))
  ------------------
  |  Branch (945:7): [True: 211, False: 272]
  |  Branch (945:57): [True: 0, False: 272]
  ------------------
  946|    211|			format = WGET_STATS_FORMAT_HUMAN;
  947|    272|		else if (!wget_strncasecmp_ascii("csv", val, p - val))
  ------------------
  |  Branch (947:12): [True: 230, False: 42]
  ------------------
  948|    230|			format = WGET_STATS_FORMAT_CSV;
  949|     42|		else {
  950|     42|			error_printf(_("Unknown stats format '%s'\n"), val);
  ------------------
  |  |   55|     42|#define error_printf  wget_error_printf
  ------------------
              			error_printf(_("Unknown stats format '%s'\n"), val);
  ------------------
  |  |   48|     42|#	define _(STRING) gettext(STRING)
  ------------------
  951|     42|			return -1;
  952|     42|		}
  953|       |
  954|    441|		val = p + 1;
  955|    611|	} else { // no format given
  956|    611|		format = WGET_STATS_FORMAT_HUMAN;
  957|    611|	}
  958|       |
  959|  1.05k|	if (!*stats)
  ------------------
  |  Branch (959:6): [True: 310, False: 742]
  ------------------
  960|    310|		*stats = wget_calloc(1, sizeof(stats_args));
  961|       |
  962|  1.05k|	(*stats)->filename = shell_expand(val);
  963|  1.05k|	(*stats)->format = format;
  964|       |
  965|  1.05k|	return 0;
  966|  1.09k|}
options.c:get_home_dir:
 2980|  19.1k|{
 2981|  19.1k|	static const char *home;
 2982|       |
 2983|  19.1k|	if (free_home) {
  ------------------
  |  Branch (2983:6): [True: 9.59k, False: 9.59k]
  ------------------
 2984|  9.59k|		xfree(home);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 9.59k, False: 0]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2985|  9.59k|		return NULL;
 2986|  9.59k|	}
 2987|       |
 2988|  9.59k|	if (!home) {
  ------------------
  |  Branch (2988:6): [True: 9.59k, False: 0]
  ------------------
 2989|  9.59k|		if ((home = wget_strnglob("~", 1, GLOB_TILDE_CHECK)) == NULL)
  ------------------
  |  Branch (2989:7): [True: 0, False: 9.59k]
  ------------------
 2990|      0|			home = wget_strdup("."); // Use the current directory as 'home' directory
 2991|  9.59k|	}
 2992|       |
 2993|  9.59k|	return home;
 2994|  19.1k|}
options.c:get_xdg_config_home:
 3215|  19.1k|{
 3216|       |	// According to the XDG Basedir Spec, configuration data goes into
 3217|       |	// $XDG_CONFIG_HOME, or ~/.config. On Windows, the closest alternative is
 3218|       |	// %LOCALAPPDATA%. We would like to store the Wget2 configuration files
 3219|       |	// within a separate wget directory.
 3220|  19.1k|	static const char *home_dir = NULL;
 3221|  19.1k|	const char *env;
 3222|       |
 3223|  19.1k|	if (!user_home) {
  ------------------
  |  Branch (3223:6): [True: 9.59k, False: 9.59k]
  ------------------
 3224|  9.59k|		xfree(home_dir);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 9.59k, False: 0]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3225|  9.59k|		return NULL;
 3226|  9.59k|	}
 3227|       |
 3228|  9.59k|	if (home_dir)
  ------------------
  |  Branch (3228:6): [True: 0, False: 9.59k]
  ------------------
 3229|      0|		return home_dir;
 3230|       |
 3231|       |#ifdef _WIN32
 3232|       |	if ((env = getenv("LOCALAPPDATA")) && *env)
 3233|       |		home_dir = wget_aprintf("%s/wget", env);
 3234|       |	else
 3235|       |		home_dir = wget_strdup(user_home);
 3236|       |#else
 3237|  9.59k|	if ((env = getenv("XDG_CONFIG_HOME")) && *env)
  ------------------
  |  Branch (3237:6): [True: 0, False: 9.59k]
  |  Branch (3237:43): [True: 0, False: 0]
  ------------------
 3238|      0|		home_dir = wget_aprintf("%s/wget", env);
 3239|  9.59k|	else
 3240|  9.59k|		home_dir = wget_aprintf("%s/.config/wget", user_home);
 3241|  9.59k|#endif
 3242|       |
 3243|  9.59k|	return home_dir;
 3244|  9.59k|}
options.c:get_xdg_data_home:
 3186|  19.1k|{
 3187|  19.1k|	static const char *data_home = NULL;
 3188|  19.1k|	const char *env;
 3189|       |
 3190|  19.1k|	if (!user_home) {
  ------------------
  |  Branch (3190:6): [True: 9.59k, False: 9.59k]
  ------------------
 3191|  9.59k|		xfree(data_home);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 9.59k, False: 0]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3192|  9.59k|		return NULL;
 3193|  9.59k|	}
 3194|       |
 3195|  9.59k|	if (data_home)
  ------------------
  |  Branch (3195:6): [True: 0, False: 9.59k]
  ------------------
 3196|      0|		return data_home;
 3197|       |
 3198|       |#ifdef _WIN32
 3199|       |	if ((env = getenv("LOCALAPPDATA")) && *env)
 3200|       |		data_home = wget_aprintf("%s/wget", env);
 3201|       |	else
 3202|       |		data_home = wget_strdup(user_home);
 3203|       |#else
 3204|  9.59k|	if ((env = getenv("XDG_DATA_HOME")) && *env)
  ------------------
  |  Branch (3204:6): [True: 0, False: 9.59k]
  |  Branch (3204:41): [True: 0, False: 0]
  ------------------
 3205|      0|		data_home = wget_aprintf("%s/wget", env);
 3206|  9.59k|	else {
 3207|  9.59k|		data_home = wget_aprintf("%s/.local/share/wget", user_home);
 3208|  9.59k|	}
 3209|  9.59k|#endif
 3210|  9.59k|	mkdir_path(data_home, false);
 3211|  9.59k|	return data_home;
 3212|  9.59k|}
options.c:get_config_files:
 3150|  9.59k|{
 3151|  9.59k|	const char *env;
 3152|       |
 3153|       |	// First add the Global Wget2rc file.
 3154|  9.59k|	if ((env = getenv ("SYSTEM_WGET2RC")) && *env) {
  ------------------
  |  Branch (3154:6): [True: 0, False: 9.59k]
  |  Branch (3154:43): [True: 0, False: 0]
  ------------------
 3155|      0|		config.system_config = wget_strdup(env);
 3156|  9.59k|	} else if (config.system_config) {
  ------------------
  |  Branch (3156:13): [True: 1, False: 9.59k]
  ------------------
 3157|      1|		if (access(config.system_config, R_OK) != 0)
  ------------------
  |  Branch (3157:7): [True: 1, False: 0]
  ------------------
 3158|      1|			xfree(config.system_config);
  ------------------
  |  |   61|      1|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1, False: 0]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3159|      1|	}
 3160|       |
 3161|  9.59k|	if ((env = getenv("WGET2RC")) && *env) {
  ------------------
  |  Branch (3161:6): [True: 0, False: 9.59k]
  |  Branch (3161:35): [True: 0, False: 0]
  ------------------
 3162|       |		// If the WGET2RC variable is set, then load that file
 3163|      0|		config.user_config = wget_strdup(env);
 3164|  9.59k|	} else {
 3165|  9.59k|		const char *path = wget_aprintf("%s/wget2rc", config_home);
 3166|  9.59k|		if (access(path, R_OK) == 0)
  ------------------
  |  Branch (3166:7): [True: 0, False: 9.59k]
  ------------------
 3167|      0|			config.user_config = path;
 3168|  9.59k|		else
 3169|  9.59k|			xfree(path);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 9.59k, False: 0]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3170|  9.59k|	}
 3171|       |
 3172|       |	// XXX: This is a compatibility shim and should be removed by the next
 3173|       |	// release.
 3174|  9.59k|	if (!config.user_config) {
  ------------------
  |  Branch (3174:6): [True: 9.59k, False: 0]
  ------------------
 3175|  9.59k|		const char *path = wget_aprintf("%s/.wget2rc", user_home);
 3176|  9.59k|		if (access(path, R_OK) == 0) {
  ------------------
  |  Branch (3176:7): [True: 0, False: 9.59k]
  ------------------
 3177|      0|			config.user_config = path;
 3178|      0|			error_printf(_("~/.wget2rc is deprecated. Please move it to %s/wget2rc\n"), config_home);
  ------------------
  |  |   55|      0|#define error_printf  wget_error_printf
  ------------------
              			error_printf(_("~/.wget2rc is deprecated. Please move it to %s/wget2rc\n"), config_home);
  ------------------
  |  |   48|      0|#	define _(STRING) gettext(STRING)
  ------------------
 3179|  9.59k|		} else {
 3180|  9.59k|			xfree(path);
  ------------------
  |  |   61|  9.59k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 9.59k, False: 0]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3181|  9.59k|		}
 3182|  9.59k|	}
 3183|  9.59k|}
options.c:parse_command_line:
 2890|  19.1k|{
 2891|  19.1k|	static short shortcut_to_option[128];
 2892|  19.1k|	const char *first_arg = NULL;
 2893|  19.1k|	int n, rc;
 2894|       |
 2895|       |	// init the short option lookup table
 2896|  19.1k|	if (!shortcut_to_option[0]) {
  ------------------
  |  Branch (2896:6): [True: 19.1k, False: 0]
  ------------------
 2897|  3.62M|		for (short it = 0; it < (short) countof(options); it++) {
  ------------------
  |  |   64|  3.62M|#define countof(a) (sizeof(a)/sizeof(*(a)))
  ------------------
  |  Branch (2897:22): [True: 3.60M, False: 19.1k]
  ------------------
 2898|  3.60M|			if (options[it].short_name > 0)
  ------------------
  |  Branch (2898:8): [True: 748k, False: 2.85M]
  ------------------
 2899|   748k|				shortcut_to_option[(unsigned char)options[it].short_name] = it + 1;
 2900|  3.60M|		}
 2901|  19.1k|	}
 2902|       |
 2903|       |	// I like the idea of getopt() but not it's implementation (e.g. global variables).
 2904|       |	// Therefore I implement my own getopt() behavior.
 2905|  95.9k|	for (n = 1; n < argc && first_arg != argv[n]; n++) {
  ------------------
  |  Branch (2905:14): [True: 76.7k, False: 19.1k]
  |  Branch (2905:26): [True: 76.7k, False: 0]
  ------------------
 2906|  76.7k|		const char *argp = argv[n];
 2907|       |
 2908|  76.7k|		if (argp[0] != '-') {
  ------------------
  |  Branch (2908:7): [True: 0, False: 76.7k]
  ------------------
 2909|       |			// Move args behind options to allow mixed args/options like getopt().
 2910|       |			// In the end, the order of the args is as before.
 2911|      0|			const char *cur = argv[n];
 2912|      0|			for (int it = n; it < argc - 1; it++)
  ------------------
  |  Branch (2912:21): [True: 0, False: 0]
  ------------------
 2913|      0|				argv[it] = argv[it + 1];
 2914|      0|			argv[argc - 1] = cur;
 2915|       |
 2916|       |			// Once we see the first arg again, we are done
 2917|      0|			if (!first_arg)
  ------------------
  |  Branch (2917:8): [True: 0, False: 0]
  ------------------
 2918|      0|				first_arg = cur;
 2919|       |
 2920|      0|			n--;
 2921|      0|			continue;
 2922|      0|		}
 2923|       |
 2924|  76.7k|		if (argp[1] == '-') {
  ------------------
  |  Branch (2924:7): [True: 57.5k, False: 19.1k]
  ------------------
 2925|       |			// long option
 2926|  57.5k|			if (argp[2] == 0)
  ------------------
  |  Branch (2926:8): [True: 0, False: 57.5k]
  ------------------
 2927|      0|				return n + 1;
 2928|       |
 2929|  57.5k|			if ((rc = set_long_option(argp + 2, n < argc - 1 ? argv[n+1] : NULL, 0)) < 0)
  ------------------
  |  Branch (2929:8): [True: 0, False: 57.5k]
  |  Branch (2929:40): [True: 57.5k, False: 0]
  ------------------
 2930|      0|				return rc;
 2931|       |
 2932|  57.5k|			n += rc;
 2933|       |
 2934|  57.5k|		} else if (argp[1]) {
  ------------------
  |  Branch (2934:14): [True: 19.1k, False: 0]
  ------------------
 2935|       |			// short option(s)
 2936|  38.3k|			for (int pos = 1; argp[pos]; pos++) {
  ------------------
  |  Branch (2936:22): [True: 19.1k, False: 19.1k]
  ------------------
 2937|  19.1k|				option_t opt;
 2938|  19.1k|				int idx;
 2939|       |
 2940|  19.1k|				if (c_isalnum(argp[pos]) && (idx = shortcut_to_option[(unsigned char)argp[pos]])) {
  ------------------
  |  Branch (2940:9): [True: 19.1k, False: 0]
  |  Branch (2940:33): [True: 19.1k, False: 0]
  ------------------
 2941|  19.1k|					opt = &options[idx - 1];
 2942|       |					// info_printf("opt=%p [%c]\n",(void *)opt,argp[pos]);
 2943|       |					// info_printf("name=%s\n",opt->long_name);
 2944|  19.1k|					if (opt->args > 0) {
  ------------------
  |  Branch (2944:10): [True: 0, False: 19.1k]
  ------------------
 2945|      0|						const char *val;
 2946|       |
 2947|      0|						if (!argp[pos + 1] && argc <= n + opt->args) {
  ------------------
  |  Branch (2947:11): [True: 0, False: 0]
  |  Branch (2947:29): [True: 0, False: 0]
  ------------------
 2948|      0|							error_printf(_("Missing argument(s) for option '-%c'\n"), argp[pos]);
  ------------------
  |  |   55|      0|#define error_printf  wget_error_printf
  ------------------
              							error_printf(_("Missing argument(s) for option '-%c'\n"), argp[pos]);
  ------------------
  |  |   48|      0|#	define _(STRING) gettext(STRING)
  ------------------
 2949|      0|							return -1;
 2950|      0|						}
 2951|      0|						val = argp[pos + 1] ? argp + pos + 1 : argv[++n];
  ------------------
  |  Branch (2951:13): [True: 0, False: 0]
  ------------------
 2952|      0|						if ((rc = opt->parser(opt, val, 0)) < 0)
  ------------------
  |  Branch (2952:11): [True: 0, False: 0]
  ------------------
 2953|      0|							return rc;
 2954|      0|						n += rc;
 2955|      0|						break;
 2956|  19.1k|					} else {//if (opt->args == 0)
 2957|  19.1k|						if ((rc = opt->parser(opt, NULL, 0)) < 0)
  ------------------
  |  Branch (2957:11): [True: 0, False: 19.1k]
  ------------------
 2958|      0|							return rc;
 2959|  19.1k|					}
 2960|       |/*					else {
 2961|       |						const char *val;
 2962|       |						val = argp[pos + 1] ? argp + pos + 1 : NULL;
 2963|       |						n += opt->parser(opt, val);
 2964|       |						break;
 2965|       |					}
 2966|       |*/
 2967|  19.1k|				} else {
 2968|      0|					error_printf(_("Unknown option '-%c'\n"), argp[pos]);
  ------------------
  |  |   55|      0|#define error_printf  wget_error_printf
  ------------------
              					error_printf(_("Unknown option '-%c'\n"), argp[pos]);
  ------------------
  |  |   48|      0|#	define _(STRING) gettext(STRING)
  ------------------
 2969|      0|					return -1;
 2970|      0|				}
 2971|  19.1k|			}
 2972|  19.1k|		}
 2973|  76.7k|	}
 2974|       |
 2975|  19.1k|	return n;
 2976|  19.1k|}
options.c:read_config:
 2877|  9.59k|{
 2878|  9.59k|	bool ret = true;
 2879|       |
 2880|  9.59k|	if (config.system_config)
  ------------------
  |  Branch (2880:6): [True: 0, False: 9.59k]
  ------------------
 2881|      0|		ret = read_config_expand(config.system_config, 1);
 2882|       |
 2883|  9.59k|	if (config.user_config)
  ------------------
  |  Branch (2883:6): [True: 9.59k, False: 0]
  ------------------
 2884|  9.59k|		ret &= read_config_expand(config.user_config, 1);
 2885|       |
 2886|  9.59k|	return ret;
 2887|  9.59k|}
options.c:read_config_expand:
 2767|  49.7k|{
 2768|  49.7k|	static int level; // level of recursions to prevent endless include loops
 2769|  49.7k|	FILE *fp;
 2770|  49.7k|	char *buf = NULL, *linep, *name, *val;
 2771|  49.7k|	int append = 0, found, ret = 0, rc;
 2772|  49.7k|	size_t bufsize = 0;
 2773|  49.7k|	ssize_t len;
 2774|  49.7k|	wget_buffer linebuf;
 2775|       |
 2776|  49.7k|	if (++level > 20) {
  ------------------
  |  Branch (2776:6): [True: 1.27k, False: 48.4k]
  ------------------
 2777|  1.27k|		error_printf(_("Config file recursion detected in %s\n"), cfgfile);
  ------------------
  |  |   55|  1.27k|#define error_printf  wget_error_printf
  ------------------
              		error_printf(_("Config file recursion detected in %s\n"), cfgfile);
  ------------------
  |  |   48|  1.27k|#	define _(STRING) gettext(STRING)
  ------------------
 2778|  1.27k|		level--;
 2779|  1.27k|		return -2;
 2780|  1.27k|	}
 2781|       |
 2782|  48.4k|	if (expand) {
  ------------------
  |  Branch (2782:6): [True: 25.9k, False: 22.5k]
  ------------------
 2783|  25.9k|		glob_t globbuf = { .gl_pathc = 0 };
 2784|       |
 2785|  25.9k|		if (glob(cfgfile, GLOB_MARK | GLOB_TILDE, NULL, &globbuf) == 0) {
  ------------------
  |  Branch (2785:7): [True: 4.32k, False: 21.6k]
  ------------------
 2786|  4.32k|			size_t it;
 2787|       |
 2788|  8.64k|			for (it = 0; it < globbuf.gl_pathc && ret == 0; it++) {
  ------------------
  |  Branch (2788:17): [True: 4.32k, False: 4.32k]
  |  Branch (2788:42): [True: 4.32k, False: 0]
  ------------------
 2789|  4.32k|				if (globbuf.gl_pathv[it][strlen(globbuf.gl_pathv[it])-1] != '/') {
  ------------------
  |  Branch (2789:9): [True: 892, False: 3.43k]
  ------------------
 2790|    892|					ret = read_config_expand(globbuf.gl_pathv[it], 0);
 2791|    892|				}
 2792|  4.32k|			}
 2793|       |
 2794|  4.32k|			globfree(&globbuf);
 2795|  21.6k|		} else {
 2796|  21.6k|			ret = read_config_expand(cfgfile, 0);
 2797|  21.6k|		}
 2798|       |
 2799|  25.9k|		level--;
 2800|  25.9k|		return ret;
 2801|  25.9k|	}
 2802|       |
 2803|  22.5k|	if ((fp = fopen(cfgfile, "r")) == NULL) {
  ------------------
  |  Branch (2803:6): [True: 528, False: 21.9k]
  ------------------
 2804|    528|		error_printf(_("Failed to open %s (%d): %s\n"), cfgfile, errno, strerror(errno));
  ------------------
  |  |   55|    528|#define error_printf  wget_error_printf
  ------------------
              		error_printf(_("Failed to open %s (%d): %s\n"), cfgfile, errno, strerror(errno));
  ------------------
  |  |   48|    528|#	define _(STRING) gettext(STRING)
  ------------------
 2805|    528|		level--;
 2806|    528|		return -1;
 2807|    528|	}
 2808|       |
 2809|  21.9k|	debug_printf("Reading %s\n", cfgfile);
  ------------------
  |  |   57|  21.9k|#define debug_printf wget_debug_printf
  ------------------
 2810|       |
 2811|  21.9k|	char tmp[1024];
 2812|  21.9k|	wget_buffer_init(&linebuf, tmp, sizeof(tmp));
 2813|       |
 2814|   110k|	while (ret == 0 && (len = wget_getline(&buf, &bufsize, fp)) >= 0) {
  ------------------
  |  Branch (2814:9): [True: 95.2k, False: 15.5k]
  |  Branch (2814:21): [True: 88.8k, False: 6.40k]
  ------------------
 2815|  88.8k|		if (len == 0 || *buf == '\r' || *buf == '\n') continue;
  ------------------
  |  Branch (2815:7): [True: 2.29k, False: 86.5k]
  |  Branch (2815:19): [True: 242, False: 86.3k]
  |  Branch (2815:35): [True: 0, False: 86.3k]
  ------------------
 2816|       |
 2817|  86.3k|		linep = buf;
 2818|       |
 2819|       |		// remove leading whitespace (only on non-continuation lines)
 2820|  86.3k|		if (!append)
  ------------------
  |  Branch (2820:7): [True: 84.8k, False: 1.46k]
  ------------------
 2821|  85.8k|			while (c_isspace(*linep)) {
  ------------------
  |  Branch (2821:11): [True: 1.05k, False: 84.8k]
  ------------------
 2822|  1.05k|				linep++;
 2823|  1.05k|				len--;
 2824|  1.05k|			}
 2825|  86.3k|		if (*linep == '#') continue;
  ------------------
  |  Branch (2825:7): [True: 204, False: 86.0k]
  ------------------
 2826|       |
 2827|       |		// remove trailing whitespace
 2828|  87.7k|		while (len > 0 && c_isspace(linep[len - 1]))
  ------------------
  |  Branch (2828:10): [True: 86.9k, False: 771]
  |  Branch (2828:21): [True: 1.63k, False: 85.3k]
  ------------------
 2829|  1.63k|			len--;
 2830|  86.0k|		linep[len] = 0;
 2831|       |
 2832|  86.0k|		if (len > 0 && linep[len - 1] == '\\') {
  ------------------
  |  Branch (2832:7): [True: 85.3k, False: 771]
  |  Branch (2832:18): [True: 1.48k, False: 83.8k]
  ------------------
 2833|  1.48k|			if (append) {
  ------------------
  |  Branch (2833:8): [True: 529, False: 957]
  ------------------
 2834|    529|				wget_buffer_memcat(&linebuf, linep, len - 1);
 2835|    957|			} else {
 2836|    957|				wget_buffer_memcpy(&linebuf, linep, len - 1);
 2837|    957|				append = 1;
 2838|    957|			}
 2839|  1.48k|			continue;
 2840|  84.6k|		} else if (append) {
  ------------------
  |  Branch (2840:14): [True: 938, False: 83.6k]
  ------------------
 2841|    938|			wget_buffer_strcat(&linebuf, linep);
 2842|    938|			append = 0;
 2843|    938|			linep = linebuf.data;
 2844|    938|		}
 2845|       |
 2846|  84.6k|		found = parse_option(linep, &name, &val);
 2847|       |
 2848|  84.6k|		if (found == 1) {
  ------------------
  |  Branch (2848:7): [True: 58.2k, False: 26.3k]
  ------------------
 2849|       |			// debug_printf("%s = %s\n",name,val);
 2850|  58.2k|			if ((rc = set_long_option(name, val, 1)) < 0)
  ------------------
  |  Branch (2850:8): [True: 1.35k, False: 56.8k]
  ------------------
 2851|  1.35k|				ret = rc;
 2852|  58.2k|		} else if (found == 2) {
  ------------------
  |  Branch (2852:14): [True: 25.0k, False: 1.28k]
  ------------------
 2853|       |			// debug_printf("%s %s\n",name,val);
 2854|  25.0k|			if (!strcmp(name, "include")) {
  ------------------
  |  Branch (2854:8): [True: 17.6k, False: 7.46k]
  ------------------
 2855|  17.6k|				ret = read_config_expand(val, 1);
 2856|  17.6k|			} else {
 2857|  7.46k|				if ((rc = set_long_option(name, NULL, 0)) < 0)
  ------------------
  |  Branch (2857:9): [True: 846, False: 6.61k]
  ------------------
 2858|    846|					ret = rc;
 2859|  7.46k|			}
 2860|  25.0k|		}
 2861|  84.6k|	}
 2862|       |
 2863|  21.9k|	wget_buffer_deinit(&linebuf);
 2864|  21.9k|	xfree(buf);
  ------------------
  |  |   61|  21.9k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 21.9k, False: 0]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2865|  21.9k|	fclose(fp);
 2866|       |
 2867|  21.9k|	if (append) {
  ------------------
  |  Branch (2867:6): [True: 19, False: 21.9k]
  ------------------
 2868|     19|		error_printf(_("Failed to parse last line in '%s'\n"), cfgfile);
  ------------------
  |  |   55|     19|#define error_printf  wget_error_printf
  ------------------
              		error_printf(_("Failed to parse last line in '%s'\n"), cfgfile);
  ------------------
  |  |   48|     19|#	define _(STRING) gettext(STRING)
  ------------------
 2869|     19|		ret = -4;
 2870|     19|	}
 2871|       |
 2872|  21.9k|	level--;
 2873|  21.9k|	return ret;
 2874|  22.5k|}
options.c:parse_option:
 2708|  84.6k|{
 2709|  84.6k|	int quote;
 2710|       |
 2711|  84.9k|	while (c_isspace(*linep)) linep++;
  ------------------
  |  Branch (2711:9): [True: 355, False: 84.6k]
  ------------------
 2712|   716k|	for (*name = linep; c_isalnum(*linep) || *linep == '-' || *linep == '_'; linep++);
  ------------------
  |  Branch (2712:22): [True: 623k, False: 92.9k]
  |  Branch (2712:43): [True: 8.26k, False: 84.7k]
  |  Branch (2712:60): [True: 111, False: 84.6k]
  ------------------
 2713|       |
 2714|  84.6k|	if (!**name) {
  ------------------
  |  Branch (2714:6): [True: 1.28k, False: 83.3k]
  ------------------
 2715|  1.28k|		error_printf(_("Failed to parse: '%s'\n"), linep);
  ------------------
  |  |   55|  1.28k|#define error_printf  wget_error_printf
  ------------------
              		error_printf(_("Failed to parse: '%s'\n"), linep);
  ------------------
  |  |   48|  1.28k|#	define _(STRING) gettext(STRING)
  ------------------
 2716|       |		// continue;
 2717|  1.28k|		return 0;
 2718|  1.28k|	}
 2719|       |
 2720|  83.3k|	if (c_isspace(*linep)) {
  ------------------
  |  Branch (2720:6): [True: 380, False: 82.9k]
  ------------------
 2721|    380|		*linep++ = 0;
 2722|  1.84k|		while (c_isspace(*linep)) linep++;
  ------------------
  |  Branch (2722:10): [True: 1.46k, False: 380]
  ------------------
 2723|    380|	}
 2724|       |
 2725|  83.3k|	if (*linep == '=') {
  ------------------
  |  Branch (2725:6): [True: 58.2k, False: 25.0k]
  ------------------
 2726|       |		// option with value, e.g. debug=y
 2727|  58.2k|		*linep++ = 0;
 2728|  58.5k|		while (c_isspace(*linep)) linep++;
  ------------------
  |  Branch (2728:10): [True: 316, False: 58.2k]
  ------------------
 2729|       |
 2730|  58.2k|		*val = linep;
 2731|       |
 2732|  58.2k|		if (((quote = *linep) == '\"' || quote == '\'')) {
  ------------------
  |  Branch (2732:8): [True: 303, False: 57.9k]
  |  Branch (2732:36): [True: 1.19k, False: 56.7k]
  ------------------
 2733|  1.49k|			char *src = linep + 1, *dst = linep, c;
 2734|       |
 2735|  3.84k|			while ((c = *src) != quote && c) {
  ------------------
  |  Branch (2735:11): [True: 3.63k, False: 208]
  |  Branch (2735:34): [True: 2.34k, False: 1.28k]
  ------------------
 2736|  2.34k|				if (c == '\\' && src[1]) {
  ------------------
  |  Branch (2736:9): [True: 460, False: 1.88k]
  |  Branch (2736:22): [True: 210, False: 250]
  ------------------
 2737|       |					// we could extend \r, \n etc to control codes here
 2738|       |					// but it is not needed so far
 2739|    210|					*dst++ = src[1];
 2740|    210|					src += 2;
 2741|  2.13k|				} else *dst++ = *src++;
 2742|  2.34k|			}
 2743|  1.49k|			*dst = 0;
 2744|  1.49k|		}
 2745|  58.2k|		return 1;
 2746|  58.2k|	} else {
 2747|       |		// statement (e.g. include ".wgetrc.d") or boolean option without value (e.g. no-recursive)
 2748|  25.0k|		if (*linep) *linep++ = 0;
  ------------------
  |  Branch (2748:7): [True: 18.2k, False: 6.80k]
  ------------------
 2749|  25.3k|		while (c_isspace(*linep)) linep++;
  ------------------
  |  Branch (2749:10): [True: 267, False: 25.0k]
  ------------------
 2750|  25.0k|		*val = linep;
 2751|  25.0k|		return 2;
 2752|  25.0k|	}
 2753|  83.3k|}
options.c:preload_dns_cache:
 3120|  5.30k|{
 3121|  5.30k|	FILE *fp;
 3122|  5.30k|	char buf[256], ip[64], name[256];
 3123|       |
 3124|       |	// wget_options_fuzzer sets config.dont_write, avoid waiting for stdin input forever
 3125|  5.30k|	if (!strcmp(fname, "-") && !config.dont_write)
  ------------------
  |  Branch (3125:6): [True: 2.90k, False: 2.39k]
  |  Branch (3125:29): [True: 0, False: 2.90k]
  ------------------
 3126|      0|		fp = stdin;
 3127|  5.30k|	else if (!(fp = fopen(fname, "r"))) {
  ------------------
  |  Branch (3127:11): [True: 3.12k, False: 2.17k]
  ------------------
 3128|  3.12k|		error_printf(_("Failed to open %s"), fname);
  ------------------
  |  |   55|  3.12k|#define error_printf  wget_error_printf
  ------------------
              		error_printf(_("Failed to open %s"), fname);
  ------------------
  |  |   48|  3.12k|#	define _(STRING) gettext(STRING)
  ------------------
 3129|  3.12k|		return -1;
 3130|  3.12k|	}
 3131|       |
 3132|  13.8k|	while (fgets(buf, sizeof(buf), fp)) {
  ------------------
  |  Branch (3132:9): [True: 11.6k, False: 2.17k]
  ------------------
 3133|  11.6k|		if (sscanf(buf, "%63[0-9.:] %255[a-zA-Z0-9.-]", ip, name) != 2)
  ------------------
  |  Branch (3133:7): [True: 10.9k, False: 716]
  ------------------
 3134|  10.9k|			continue;
 3135|       |
 3136|    716|		wget_strtolower(name);
 3137|       |
 3138|    716|		debug_printf("Adding DNS Mapping: %s -> %s\n", name, ip);
  ------------------
  |  |   57|    716|#define debug_printf wget_debug_printf
  ------------------
 3139|    716|		wget_dns_cache_ip(dns, ip, name, 80);
 3140|    716|		wget_dns_cache_ip(dns, ip, name, 443);
 3141|    716|	}
 3142|       |
 3143|  2.17k|	if (fp != stdin)
  ------------------
  |  Branch (3143:6): [True: 2.17k, False: 0]
  ------------------
 3144|  2.17k|		fclose(fp);
 3145|       |
 3146|  2.17k|	return 0;
 3147|  5.30k|}
options.c:opt_compare:
 2542|   445k|{
 2543|   445k|	return strcmp(key, ((option_t) option)->long_name);
 2544|   445k|}
options.c:parse_bool:
  689|  48.4k|{
  690|  48.4k|	if (opt->var) {
  ------------------
  |  Branch (690:6): [True: 46.2k, False: 2.15k]
  ------------------
  691|  46.2k|		if (!val || !strcmp(val, "1") || !wget_strcasecmp_ascii(val, "y") || !wget_strcasecmp_ascii(val, "yes") || !wget_strcasecmp_ascii(val, "on"))
  ------------------
  |  Branch (691:7): [True: 41.9k, False: 4.36k]
  |  Branch (691:15): [True: 210, False: 4.15k]
  |  Branch (691:36): [True: 211, False: 3.94k]
  |  Branch (691:72): [True: 210, False: 3.73k]
  |  Branch (691:110): [True: 210, False: 3.52k]
  ------------------
  692|  42.7k|			*((char *) opt->var) = !invert;
  693|  3.52k|		else if (!*val || !strcmp(val, "0") || !wget_strcasecmp_ascii(val, "n") || !wget_strcasecmp_ascii(val, "no") || !wget_strcasecmp_ascii(val, "off"))
  ------------------
  |  Branch (693:12): [True: 599, False: 2.92k]
  |  Branch (693:21): [True: 210, False: 2.71k]
  |  Branch (693:42): [True: 214, False: 2.50k]
  |  Branch (693:78): [True: 210, False: 2.29k]
  |  Branch (693:115): [True: 210, False: 2.08k]
  ------------------
  694|  1.44k|			*((char *) opt->var) = invert;
  695|  2.08k|		else {
  696|  2.08k|			error_printf(_("Invalid boolean value '%s'\n"), val);
  ------------------
  |  |   55|  2.08k|#define error_printf  wget_error_printf
  ------------------
              			error_printf(_("Invalid boolean value '%s'\n"), val);
  ------------------
  |  |   48|  2.08k|#	define _(STRING) gettext(STRING)
  ------------------
  697|  2.08k|			return -1;
  698|  2.08k|		}
  699|  46.2k|	}
  700|       |
  701|  46.3k|	return 0;
  702|  48.4k|}
options.c:parse_integer:
  276|    435|{
  277|    435|	*((int *)opt->var) = val ? atoi(val) : 0;
  ------------------
  |  Branch (277:23): [True: 435, False: 0]
  ------------------
  278|       |
  279|    435|	return 0;
  280|    435|}
options.c:parse_cert_type:
  762|    525|{
  763|    525|	if (!val || !wget_strcasecmp_ascii(val, "PEM"))
  ------------------
  |  Branch (763:6): [True: 0, False: 525]
  |  Branch (763:14): [True: 216, False: 309]
  ------------------
  764|    216|		*((char *)opt->var) = WGET_SSL_X509_FMT_PEM;
  ------------------
  |  | 1975|    216|#define WGET_SSL_X509_FMT_PEM 0
  ------------------
  765|    309|	else if (!wget_strcasecmp_ascii(val, "DER") || !wget_strcasecmp_ascii(val, "ASN1"))
  ------------------
  |  Branch (765:11): [True: 210, False: 99]
  |  Branch (765:49): [True: 80, False: 19]
  ------------------
  766|    290|		*((char *)opt->var) = WGET_SSL_X509_FMT_DER;
  ------------------
  |  | 1976|    290|#define WGET_SSL_X509_FMT_DER 1
  ------------------
  767|     19|	else {
  768|     19|		error_printf(_("Unknown cert type '%s'\n"), val);
  ------------------
  |  |   55|     19|#define error_printf  wget_error_printf
  ------------------
              		error_printf(_("Unknown cert type '%s'\n"), val);
  ------------------
  |  |   48|     19|#	define _(STRING) gettext(STRING)
  ------------------
  769|     19|		return -1;
  770|     19|	}
  771|       |
  772|    506|	return 0;
  773|    525|}
options.c:parse_check_certificate:
  671|  2.18k|{
  672|  2.18k|	if (opt->var) {
  ------------------
  |  Branch (672:6): [True: 2.18k, False: 0]
  ------------------
  673|  2.18k|		if (!val || !strcmp(val, "1") || !wget_strcasecmp_ascii(val, "y") || !wget_strcasecmp_ascii(val, "yes") || !wget_strcasecmp_ascii(val, "on"))
  ------------------
  |  Branch (673:7): [True: 236, False: 1.94k]
  |  Branch (673:15): [True: 210, False: 1.73k]
  |  Branch (673:36): [True: 210, False: 1.52k]
  |  Branch (673:72): [True: 80, False: 1.44k]
  |  Branch (673:110): [True: 210, False: 1.23k]
  ------------------
  674|    946|			*((check_certificate_mode *) opt->var) = !invert ? CHECK_CERTIFICATE_ENABLED : CHECK_CERTIFICATE_DISABLED;
  ------------------
  |  Branch (674:45): [True: 946, False: 0]
  ------------------
  675|  1.23k|		else if (!*val || !strcmp(val, "0") || !wget_strcasecmp_ascii(val, "n") || !wget_strcasecmp_ascii(val, "no") || !wget_strcasecmp_ascii(val, "off"))
  ------------------
  |  Branch (675:12): [True: 211, False: 1.02k]
  |  Branch (675:21): [True: 210, False: 817]
  |  Branch (675:42): [True: 248, False: 569]
  |  Branch (675:78): [True: 210, False: 359]
  |  Branch (675:115): [True: 210, False: 149]
  ------------------
  676|  1.08k|			*((check_certificate_mode *) opt->var) = invert ? CHECK_CERTIFICATE_ENABLED : CHECK_CERTIFICATE_DISABLED;
  ------------------
  |  Branch (676:45): [True: 1, False: 1.08k]
  ------------------
  677|    149|		else if (!strcmp(val, "quiet"))
  ------------------
  |  Branch (677:12): [True: 80, False: 69]
  ------------------
  678|     80|			*((check_certificate_mode *) opt->var) = CHECK_CERTIFICATE_LOG_DISABLED;
  679|     69|		else {
  680|     69|			error_printf(_("Invalid value '%s'\n"), val);
  ------------------
  |  |   55|     69|#define error_printf  wget_error_printf
  ------------------
              			error_printf(_("Invalid value '%s'\n"), val);
  ------------------
  |  |   48|     69|#	define _(STRING) gettext(STRING)
  ------------------
  681|     69|			return -1;
  682|     69|		}
  683|  2.18k|	}
  684|       |
  685|  2.11k|	return 0;
  686|  2.18k|}
options.c:parse_numbytes:
  331|  2.92k|{
  332|  2.92k|	if (val) {
  ------------------
  |  Branch (332:6): [True: 2.92k, False: 0]
  ------------------
  333|  2.92k|		char modifier = 0, error = 0;
  334|  2.92k|		double num = 0;
  335|       |
  336|  2.92k|		if (!wget_strcasecmp_ascii(val, "INF") || !wget_strcasecmp_ascii(val, "INFINITY")) {
  ------------------
  |  Branch (336:7): [True: 216, False: 2.70k]
  |  Branch (336:45): [True: 210, False: 2.49k]
  ------------------
  337|    426|			*((long long *)opt->var) = 0;
  338|    426|			return 0;
  339|    426|		}
  340|       |
  341|  2.49k|		if (parse_double_modifier(val, &num, &modifier) >= 1 && num >= 0) {
  ------------------
  |  Branch (341:7): [True: 2.43k, False: 64]
  |  Branch (341:59): [True: 2.43k, False: 3]
  ------------------
  342|  2.43k|			if (modifier) {
  ------------------
  |  Branch (342:8): [True: 1.31k, False: 1.11k]
  ------------------
  343|  1.31k|				switch (c_tolower(modifier)) {
  344|    220|				case 'k': num *= 1024; break;
  ------------------
  |  Branch (344:5): [True: 220, False: 1.09k]
  ------------------
  345|    213|				case 'm': num *= 1024*1024; break;
  ------------------
  |  Branch (345:5): [True: 213, False: 1.10k]
  ------------------
  346|    520|				case 'g': num *= 1024*1024*1024; break;
  ------------------
  |  Branch (346:5): [True: 520, False: 794]
  ------------------
  347|    338|				case 't': num *= 1024*1024*1024*1024LL; break;
  ------------------
  |  Branch (347:5): [True: 338, False: 976]
  ------------------
  348|     23|				default: error = 1;
  ------------------
  |  Branch (348:5): [True: 23, False: 1.29k]
  ------------------
  349|  1.31k|				}
  350|  1.31k|			}
  351|  2.43k|		} else
  352|     67|			error = 1;
  353|       |
  354|  2.49k|		if (error) {
  ------------------
  |  Branch (354:7): [True: 90, False: 2.40k]
  ------------------
  355|     90|			error_printf(_("Invalid byte specifier: %s\n"), val);
  ------------------
  |  |   55|     90|#define error_printf  wget_error_printf
  ------------------
              			error_printf(_("Invalid byte specifier: %s\n"), val);
  ------------------
  |  |   48|     90|#	define _(STRING) gettext(STRING)
  ------------------
  356|     90|			return -1;
  357|     90|		}
  358|       |
  359|  2.40k|		*((long long *)opt->var) = num > LLONG_MAX ? LLONG_MAX : (long long) num;
  ------------------
  |  Branch (359:30): [True: 214, False: 2.19k]
  ------------------
  360|  2.40k|	}
  361|       |
  362|  2.40k|	return 0;
  363|  2.92k|}
options.c:parse_double_modifier:
  297|  5.57k|{
  298|  5.57k|	bool minus = false;
  299|       |
  300|  6.14k|	while (c_isspace(*in))
  ------------------
  |  Branch (300:9): [True: 569, False: 5.57k]
  ------------------
  301|    569|		in++;
  302|       |
  303|  5.57k|	if (*in == '+') {
  ------------------
  |  Branch (303:6): [True: 420, False: 5.15k]
  ------------------
  304|    420|		in++;
  305|  5.15k|	} else if (*in == '-') {
  ------------------
  |  Branch (305:13): [True: 511, False: 4.64k]
  ------------------
  306|    511|		in++;
  307|    511|		minus = true;
  308|    511|	}
  309|       |
  310|  5.57k|	if (!c_isdigit(*in))
  ------------------
  |  Branch (310:6): [True: 908, False: 4.66k]
  ------------------
  311|    908|		return 0;
  312|       |
  313|  12.7k|	for (*d = 0; c_isdigit(*in); in++)
  ------------------
  |  Branch (313:15): [True: 8.10k, False: 4.66k]
  ------------------
  314|  8.10k|		*d = *d * 10 + (*in - '0');
  315|       |
  316|  4.66k|	if (*in == '.') {
  ------------------
  |  Branch (316:6): [True: 946, False: 3.72k]
  ------------------
  317|    946|		in++;
  318|  1.93k|		for (double q = 10; c_isdigit(*in); q *= 10, in++)
  ------------------
  |  Branch (318:23): [True: 992, False: 946]
  ------------------
  319|    992|			*d += (*in - '0') / q;
  320|    946|	}
  321|       |
  322|  4.66k|	if (minus)
  ------------------
  |  Branch (322:6): [True: 426, False: 4.24k]
  ------------------
  323|    426|		*d = -*d;
  324|       |
  325|  4.66k|	*c = *in;
  326|       |
  327|  4.66k|	return *c ? 2 : 1;
  ------------------
  |  Branch (327:9): [True: 2.66k, False: 1.99k]
  ------------------
  328|  5.57k|}
options.c:parse_compression:
 1116|  2.28k|{
 1117|  2.28k|	wget_vector *v = *((wget_vector **)opt->var);
 1118|       |
 1119|  2.28k|	if (!val && invert) {   // --no-compression
  ------------------
  |  Branch (1119:6): [True: 640, False: 1.64k]
  |  Branch (1119:14): [True: 420, False: 220]
  ------------------
 1120|       |		// should free the previous TYPE list and clear config.compression_methods for override
 1121|    420|		if (v) {
  ------------------
  |  Branch (1121:7): [True: 210, False: 210]
  ------------------
 1122|    210|			wget_vector_free((wget_vector **)opt->var);
 1123|    210|			config.compression_methods[wget_content_encoding_max] = 0;
 1124|    210|		}
 1125|       |
 1126|    420|		config.no_compression = true;
 1127|    420|		return 0;
 1128|  1.86k|	} else if (val && !invert) {    // --compression=TYPE
  ------------------
  |  Branch (1128:13): [True: 1.64k, False: 220]
  |  Branch (1128:20): [True: 1.64k, False: 1]
  ------------------
 1129|  1.64k|		int rc;
 1130|       |
 1131|       |		// should free the previous TYPE list and clear config.compression_methods for override
 1132|  1.64k|		if (v) {
  ------------------
  |  Branch (1132:7): [True: 978, False: 666]
  ------------------
 1133|    978|			wget_vector_free((wget_vector **)opt->var);
 1134|    978|			config.compression_methods[wget_content_encoding_max] = 0;
 1135|    978|		}
 1136|       |
 1137|  1.64k|		if ((rc = parse_stringlist_expand(opt, val, 0, 16)))
  ------------------
  |  Branch (1137:7): [True: 1, False: 1.64k]
  ------------------
 1138|      1|			return rc;
 1139|       |
 1140|  1.64k|		v = *((wget_vector **)opt->var);
 1141|       |
 1142|  1.64k|		config.no_compression = false;
 1143|  1.64k|		long long methods_bits = 0;		// check duplication
 1144|       |
 1145|  2.97k|		for (int it = 0; it < wget_vector_size(v); it++) {
  ------------------
  |  Branch (1145:20): [True: 1.51k, False: 1.46k]
  ------------------
 1146|  1.51k|			int not_built = 0;
 1147|  1.51k|			wget_content_encoding type = wget_content_encoding_by_name(wget_vector_get(v, it));
 1148|       |
 1149|  1.51k|			if (type == wget_content_encoding_unknown) {
  ------------------
  |  Branch (1149:8): [True: 165, False: 1.35k]
  ------------------
 1150|    165|				wget_error_printf(_("Compression type %s not supported\n"), wget_content_encoding_to_name(type));
  ------------------
  |  |   48|    165|#	define _(STRING) gettext(STRING)
  ------------------
 1151|    165|				return -1;
 1152|  1.35k|			} else if (methods_bits & (1 << type)) {
  ------------------
  |  Branch (1152:15): [True: 9, False: 1.34k]
  ------------------
 1153|      9|				wget_error_printf(_("Duplicate type %s"), wget_content_encoding_to_name(type));
  ------------------
  |  |   48|      9|#	define _(STRING) gettext(STRING)
  ------------------
 1154|      9|				return -1;
 1155|      9|			}
 1156|       |
 1157|       |#ifndef WITH_ZLIB
 1158|       |			if (type == wget_content_encoding_gzip || type == wget_content_encoding_deflate)
 1159|       |				not_built = 1;
 1160|       |#endif
 1161|  1.34k|#ifndef WITH_BZIP2
 1162|  1.34k|			if (type == wget_content_encoding_bzip2)
  ------------------
  |  Branch (1162:8): [True: 2, False: 1.34k]
  ------------------
 1163|      2|				not_built = 1;
 1164|  1.34k|#endif
 1165|  1.34k|#ifndef WITH_LZMA
 1166|  1.34k|			if (type == wget_content_encoding_xz || type == wget_content_encoding_lzma)
  ------------------
  |  Branch (1166:8): [True: 2, False: 1.34k]
  |  Branch (1166:44): [True: 1, False: 1.34k]
  ------------------
 1167|      3|				not_built = 1;
 1168|  1.34k|#endif
 1169|  1.34k|#ifndef WITH_BROTLIDEC
 1170|  1.34k|			if (type == wget_content_encoding_brotli)
  ------------------
  |  Branch (1170:8): [True: 1, False: 1.34k]
  ------------------
 1171|      1|				not_built = 1;
 1172|  1.34k|#endif
 1173|  1.34k|#ifndef WITH_ZSTD
 1174|  1.34k|			if (type == wget_content_encoding_zstd)
  ------------------
  |  Branch (1174:8): [True: 1, False: 1.34k]
  ------------------
 1175|      1|				not_built = 1;
 1176|  1.34k|#endif
 1177|  1.34k|#ifndef WITH_LZIP
 1178|  1.34k|			if (type == wget_content_encoding_lzip)
  ------------------
  |  Branch (1178:8): [True: 1, False: 1.34k]
  ------------------
 1179|      1|				not_built = 1;
 1180|  1.34k|#endif
 1181|       |
 1182|  1.34k|			if (not_built) {
  ------------------
  |  Branch (1182:8): [True: 8, False: 1.33k]
  ------------------
 1183|      8|				wget_error_printf(_("Lib for type %s not built"), wget_content_encoding_to_name(type));
  ------------------
  |  |   48|      8|#	define _(STRING) gettext(STRING)
  ------------------
 1184|      8|				return -1;
 1185|      8|			}
 1186|       |
 1187|  1.33k|			methods_bits |= (1 << type);
 1188|  1.33k|			config.compression_methods[config.compression_methods[wget_content_encoding_max]++] = type;
 1189|  1.33k|		}
 1190|       |
 1191|  1.46k|		return 0;
 1192|  1.64k|	} else if (!val && !invert) {   // --compression (for override)
  ------------------
  |  Branch (1192:13): [True: 220, False: 1]
  |  Branch (1192:21): [True: 220, False: 0]
  ------------------
 1193|    220|		config.no_compression = false;
 1194|    220|		return 0;
 1195|    220|	}
 1196|       |
 1197|      1|	return -1;
 1198|  2.28k|}
options.c:parse_timeout:
  725|  3.49k|{
  726|  3.49k|	double fval = -1;
  727|       |
  728|  3.49k|	if (wget_strcasecmp_ascii(val, "INF") && wget_strcasecmp_ascii(val, "INFINITY")) {
  ------------------
  |  Branch (728:6): [True: 3.28k, False: 210]
  |  Branch (728:43): [True: 3.07k, False: 210]
  ------------------
  729|  3.07k|		char modifier = 0;
  730|       |
  731|  3.07k|		if (parse_double_modifier(val, &fval, &modifier) >= 1 && fval >= 0) {
  ------------------
  |  Branch (731:7): [True: 2.23k, False: 844]
  |  Branch (731:60): [True: 2.02k, False: 210]
  ------------------
  732|  2.02k|			if (modifier) {
  ------------------
  |  Branch (732:8): [True: 1.35k, False: 669]
  ------------------
  733|  1.35k|				switch (c_tolower(modifier)) {
  734|    210|				case 's': fval *= 1000; break;
  ------------------
  |  Branch (734:5): [True: 210, False: 1.14k]
  ------------------
  735|    220|				case 'm': fval *= 60 * 1000; break;
  ------------------
  |  Branch (735:5): [True: 220, False: 1.13k]
  ------------------
  736|    320|				case 'h': fval *= 60 * 60 * 1000; break;
  ------------------
  |  Branch (736:5): [True: 320, False: 1.03k]
  ------------------
  737|    581|				case 'd': fval *= 60 * 60 * 24 * 1000; break;
  ------------------
  |  Branch (737:5): [True: 581, False: 774]
  ------------------
  738|     24|				default: error_printf(_("Invalid time specifier in '%s'\n"), val); return -1;
  ------------------
  |  |   55|     24|#define error_printf  wget_error_printf
  ------------------
              				default: error_printf(_("Invalid time specifier in '%s'\n"), val); return -1;
  ------------------
  |  |   48|     24|#	define _(STRING) gettext(STRING)
  ------------------
  |  Branch (738:5): [True: 24, False: 1.33k]
  ------------------
  739|  1.35k|				}
  740|  1.35k|			} else
  741|    669|				fval *= 1000;
  742|  2.02k|		}
  743|  3.07k|	}
  744|       |
  745|  3.47k|	if (fval <= 0) // special Wget compatibility: timeout 0 means INFINITY
  ------------------
  |  Branch (745:6): [True: 1.77k, False: 1.69k]
  ------------------
  746|  1.77k|		fval = -1;
  747|       |
  748|  3.47k|	if (opt->var) {
  ------------------
  |  Branch (748:6): [True: 3.05k, False: 420]
  ------------------
  749|  3.05k|		*((int *)opt->var) = fval > INT_MAX ? INT_MAX : (int) fval;
  ------------------
  |  Branch (749:24): [True: 223, False: 2.83k]
  ------------------
  750|       |		// debug_printf("timeout set to %gs\n",*((int *)opt->var)/1000.);
  751|  3.05k|	} else {
  752|       |		// --timeout option sets all timeouts
  753|    420|		config.connect_timeout =
  754|    420|		config.dns_timeout =
  755|    420|		config.read_timeout = fval > INT_MAX ? INT_MAX : (int) fval;
  ------------------
  |  Branch (755:25): [True: 210, False: 210]
  ------------------
  756|    420|	}
  757|       |
  758|  3.47k|	return 0;
  759|  3.49k|}
options.c:parse_uint16:
  283|    280|{
  284|    280|	int port = val ? atoi(val) : 0;
  ------------------
  |  Branch (284:13): [True: 280, False: 0]
  ------------------
  285|       |
  286|    280|	if (port >= 0 && port <= UINT16_MAX) {
  ------------------
  |  Branch (286:6): [True: 252, False: 28]
  |  Branch (286:19): [True: 237, False: 15]
  ------------------
  287|    237|		*((uint16_t *)opt->var) = (uint16_t) port;
  288|    237|		return 0;
  289|    237|	}
  290|       |
  291|     43|	error_printf(_("Value out of range (0-65535): %s\n"), val);
  ------------------
  |  |   55|     43|#define error_printf  wget_error_printf
  ------------------
              	error_printf(_("Value out of range (0-65535): %s\n"), val);
  ------------------
  |  |   48|     43|#	define _(STRING) gettext(STRING)
  ------------------
  292|     43|	return -1;
  293|    280|}
options.c:parse_download_attr:
 1201|    929|{
 1202|    929|	(void) opt;
 1203|       |
 1204|    929|	if (!val && invert) {   // --no-download-attr
  ------------------
  |  Branch (1204:6): [True: 480, False: 449]
  |  Branch (1204:14): [True: 210, False: 270]
  ------------------
 1205|    210|		config.download_attr = DOWNLOAD_ATTR_NO;
 1206|    210|		return 0;
 1207|    210|	}
 1208|       |
 1209|    719|	if (!val) {    // --download_attr
  ------------------
  |  Branch (1209:6): [True: 270, False: 449]
  ------------------
 1210|    270|		config.download_attr = DOWNLOAD_ATTR_STRIPPATH;
 1211|    270|		return 0;
 1212|    270|	}
 1213|       |
 1214|    449|	if (invert) {
  ------------------
  |  Branch (1214:6): [True: 1, False: 448]
  ------------------
 1215|      1|		error_printf(_("Disallowed Value for --no-download-attr: %s\n"), val);
  ------------------
  |  |   55|      1|#define error_printf  wget_error_printf
  ------------------
              		error_printf(_("Disallowed Value for --no-download-attr: %s\n"), val);
  ------------------
  |  |   48|      1|#	define _(STRING) gettext(STRING)
  ------------------
 1216|      1|		return -1;
 1217|      1|	}
 1218|       |
 1219|    448|	if (!strcasecmp(val, "strippath")) {
  ------------------
  |  Branch (1219:6): [True: 80, False: 368]
  ------------------
 1220|     80|		config.download_attr = DOWNLOAD_ATTR_STRIPPATH;
 1221|    368|	} else if (!strcasecmp(val, "usepath")) {
  ------------------
  |  Branch (1221:13): [True: 216, False: 152]
  ------------------
 1222|    216|		config.download_attr = DOWNLOAD_ATTR_USEPATH;
 1223|    216|	} else {
 1224|    152|		error_printf(_("Invalid value for --download-attr: %s\n"), val);
  ------------------
  |  |   55|    152|#define error_printf  wget_error_printf
  ------------------
              		error_printf(_("Invalid value for --download-attr: %s\n"), val);
  ------------------
  |  |   48|    152|#	define _(STRING) gettext(STRING)
  ------------------
 1225|    152|		return -1;
 1226|    152|	}
 1227|       |
 1228|    296|	return 0;
 1229|    448|}
options.c:parse_excluded_directories:
  583|    839|{
  584|    839|	char *prefixed_val = set_char_prefix(val, EXCLUDED_DIRECTORY_PREFIX);
  ------------------
  |  |   41|    839|#define EXCLUDED_DIRECTORY_PREFIX '-'
  ------------------
  585|    839|	int ret = parse_stringlist_expand(opt, prefixed_val, 0, 1024);
  586|       |
  587|    839|	if (prefixed_val)
  ------------------
  |  Branch (587:6): [True: 619, False: 220]
  ------------------
  588|    619|		xfree(prefixed_val);
  ------------------
  |  |   61|    619|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 619, False: 0]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  589|       |
  590|    839|	return ret;
  591|    839|}
options.c:set_char_prefix:
  540|  1.76k|{
  541|  1.76k|	if (val && *val) {
  ------------------
  |  Branch (541:6): [True: 1.76k, False: 0]
  |  Branch (541:13): [True: 1.29k, False: 470]
  ------------------
  542|       |		// we just need a scratch buffer, no need for optimal size calculation
  543|  1.29k|		char *prefixed_val = wget_malloc(strlen(val) * 3 + 1), *dst = prefixed_val;
  544|       |
  545|  1.29k|		*dst++ = prefix;
  546|  30.9k|		for (const char *src = val; *src; src++) {
  ------------------
  |  Branch (546:31): [True: 29.6k, False: 1.29k]
  ------------------
  547|  29.6k|			if (*src == '\\') {
  ------------------
  |  Branch (547:8): [True: 828, False: 28.8k]
  ------------------
  548|    828|				*dst++ = *src;
  549|    828|				if (src[1])
  ------------------
  |  Branch (549:9): [True: 408, False: 420]
  ------------------
  550|    408|					*dst++ = *++src;
  551|  28.8k|			} else if (*src == ',') {
  ------------------
  |  Branch (551:15): [True: 18.4k, False: 10.3k]
  ------------------
  552|  18.9k|				while (dst[-1] == '/')
  ------------------
  |  Branch (552:12): [True: 439, False: 18.4k]
  ------------------
  553|    439|					dst--;
  554|  18.4k|				*dst++ = *src;
  555|  18.4k|				*dst++ = prefix;
  556|  18.4k|			} else
  557|  10.3k|				*dst++ = *src;
  558|  29.6k|		}
  559|       |
  560|  1.70k|		while (dst[-1] == '/')
  ------------------
  |  Branch (560:10): [True: 409, False: 1.29k]
  ------------------
  561|    409|			dst--;
  562|       |
  563|  1.29k|		*dst = 0;
  564|       |
  565|  1.29k|		return prefixed_val;
  566|  1.29k|	}
  567|       |
  568|    470|	return NULL;
  569|  1.76k|}
options.c:parse_execute:
 2702|    978|{
 2703|       |	// info_printf("### argv=%s val=%s\n",argv[0],val);
 2704|    978|	return set_long_option(val, NULL, 1);
 2705|    978|}
options.c:parse_taglist:
  649|  2.21k|{
  650|  2.21k|	if (val && *val) {
  ------------------
  |  Branch (650:6): [True: 2.21k, False: 0]
  |  Branch (650:13): [True: 1.28k, False: 926]
  ------------------
  651|  1.28k|		wget_vector *v = *((wget_vector **)opt->var);
  652|  1.28k|		const char *s, *p;
  653|       |
  654|  1.28k|		if (!v) {
  ------------------
  |  Branch (654:7): [True: 809, False: 477]
  ------------------
  655|    809|			v = *((wget_vector **)opt->var) = wget_vector_create(8, (wget_vector_compare_fn *) compare_tag);
  656|    809|			wget_vector_set_destructor(v, tag_free);
  657|    809|		}
  658|       |
  659|  7.51k|		for (s = p = val; *p; s = p + 1) {
  ------------------
  |  Branch (659:21): [True: 6.22k, False: 1.28k]
  ------------------
  660|  6.22k|			if ((p = strchrnul(s, ',')) != s)
  ------------------
  |  Branch (660:8): [True: 5.63k, False: 591]
  ------------------
  661|  5.63k|				add_tag(v, s, p);
  662|  6.22k|		}
  663|  1.28k|	} else {
  664|    926|		wget_vector_free(opt->var);
  665|    926|	}
  666|       |
  667|  2.21k|	return 0;
  668|  2.21k|}
options.c:compare_tag:
  630|  21.9k|{
  631|  21.9k|	int n;
  632|       |
  633|  21.9k|	if (!(n = wget_strcasecmp_ascii(t1->name, t2->name))) {
  ------------------
  |  Branch (633:6): [True: 3.45k, False: 18.5k]
  ------------------
  634|  3.45k|		if (!t1->attribute) {
  ------------------
  |  Branch (634:7): [True: 1.68k, False: 1.77k]
  ------------------
  635|  1.68k|			if (!t2->attribute)
  ------------------
  |  Branch (635:8): [True: 1.47k, False: 208]
  ------------------
  636|  1.47k|				n = 0;
  637|    208|			else
  638|    208|				n = -1;
  639|  1.77k|		} else if (!t2->attribute) {
  ------------------
  |  Branch (639:14): [True: 207, False: 1.56k]
  ------------------
  640|    207|			n = 1;
  641|    207|		} else
  642|  1.56k|			n = wget_strcasecmp_ascii(t1->attribute, t2->attribute);
  643|  3.45k|	}
  644|       |
  645|  21.9k|	return n;
  646|  21.9k|}
options.c:tag_free:
  600|  5.63k|{
  601|  5.63k|	wget_html_tag *t = tag;
  602|       |
  603|  5.63k|	if (t) {
  ------------------
  |  Branch (603:6): [True: 5.63k, False: 0]
  ------------------
  604|  5.63k|		xfree(t->attribute);
  ------------------
  |  |   61|  5.63k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 1.38k, False: 4.24k]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  605|  5.63k|		xfree(t->name);
  ------------------
  |  |   61|  5.63k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 5.63k, False: 0]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  606|  5.63k|		xfree(t);
  ------------------
  |  |   61|  5.63k|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 5.63k, False: 0]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  607|  5.63k|	}
  608|  5.63k|}
options.c:add_tag:
  611|  5.63k|{
  612|  5.63k|	wget_html_tag *tag = wget_malloc(sizeof(wget_html_tag));
  613|  5.63k|	const char *attribute;
  614|       |
  615|  5.63k|	if ((attribute = memchr(begin, '/', end - begin))) {
  ------------------
  |  Branch (615:6): [True: 1.38k, False: 4.24k]
  ------------------
  616|  1.38k|		tag->name = wget_strmemdup(begin, attribute - begin);
  617|  1.38k|		tag->attribute = wget_strmemdup(attribute + 1, (end - begin) - (attribute - begin) - 1);
  618|  4.24k|	} else {
  619|  4.24k|		tag->name = wget_strmemdup(begin, end - begin);
  620|  4.24k|		tag->attribute = NULL;
  621|  4.24k|	}
  622|       |
  623|  5.63k|	if (wget_vector_find(v, tag) < 0)
  ------------------
  |  Branch (623:6): [True: 3.29k, False: 2.33k]
  ------------------
  624|  3.29k|		wget_vector_insert_sorted(v, tag);
  625|  2.33k|	else
  626|  2.33k|		tag_free(tag); // avoid double entries
  627|  5.63k|}
options.c:parse_header:
  412|  7.17k|{
  413|  7.17k|	wget_vector *v = *((wget_vector **)opt->var);
  414|       |
  415|  7.17k|	if (val && *val) {
  ------------------
  |  Branch (415:6): [True: 7.17k, False: 0]
  |  Branch (415:13): [True: 6.61k, False: 560]
  ------------------
  416|  6.61k|		char *value, *delim_pos;
  417|       |
  418|  6.61k|		if (!v) {
  ------------------
  |  Branch (418:7): [True: 112, False: 6.50k]
  ------------------
  419|    112|			v = *((wget_vector **)opt->var) =
  420|    112|				wget_vector_create(8, (wget_vector_compare_fn *) compare_wget_http_param);
  421|    112|			wget_vector_set_destructor(v, (wget_vector_destructor *) wget_http_free_param);
  422|    112|		}
  423|       |
  424|  6.61k|		delim_pos = strchr(val, ':');
  425|       |
  426|  6.61k|		if (!delim_pos || delim_pos == val) {
  ------------------
  |  Branch (426:7): [True: 364, False: 6.24k]
  |  Branch (426:21): [True: 210, False: 6.03k]
  ------------------
  427|    574|			wget_error_printf(_("Ignoring invalid header: %s\n"), val);
  ------------------
  |  |   48|    574|#	define _(STRING) gettext(STRING)
  ------------------
  428|    574|			return 0;
  429|    574|		}
  430|       |
  431|  6.03k|		value = delim_pos + 1;
  432|  6.23k|		while (*value == ' ')
  ------------------
  |  Branch (432:10): [True: 196, False: 6.03k]
  ------------------
  433|    196|			value++;
  434|       |
  435|  6.03k|		if (*value == '\0') {
  ------------------
  |  Branch (435:7): [True: 230, False: 5.80k]
  ------------------
  436|    230|			wget_error_printf(_("No value in header (ignoring): %s\n"), val);
  ------------------
  |  |   48|    230|#	define _(STRING) gettext(STRING)
  ------------------
  437|    230|			return 0;
  438|    230|		}
  439|       |
  440|  5.80k|		wget_http_header_param *param = wget_malloc(sizeof(wget_http_header_param));
  441|  5.80k|		param->name = wget_strmemdup(val, delim_pos - val);
  442|  5.80k|		param->value = wget_strdup(value);
  443|       |
  444|  5.80k|		if (wget_vector_find(v, param) < 0)
  ------------------
  |  Branch (444:7): [True: 4.82k, False: 979]
  ------------------
  445|  4.82k|			wget_vector_add(v, param);
  446|    979|		else
  447|    979|			wget_http_free_param(param);
  448|       |
  449|  5.80k|	} else if (val && *val == '\0') {
  ------------------
  |  Branch (449:13): [True: 560, False: 0]
  |  Branch (449:20): [True: 560, False: 0]
  ------------------
  450|    560|		wget_vector_clear(v);
  451|    560|		return 0;
  452|    560|	}
  453|       |
  454|  5.80k|	return 0;
  455|  7.17k|}
options.c:compare_wget_http_param:
  404|  43.9k|{
  405|  43.9k|	if (wget_strcasecmp_ascii(a->name, b->name) == 0)
  ------------------
  |  Branch (405:6): [True: 6.08k, False: 37.8k]
  ------------------
  406|  6.08k|		if (wget_strcasecmp_ascii(a->value, b->value) == 0)
  ------------------
  |  Branch (406:7): [True: 979, False: 5.10k]
  ------------------
  407|    979|			return 0;
  408|  42.9k|	return 1;
  409|  43.9k|}
options.c:print_help:
 2439|      1|{
 2440|      1|	set_exit_status(EXIT_STATUS_NO_ERROR);
 2441|      1|	return -1; // stop processing & exit
 2442|      1|}
options.c:parse_https_enforce:
 1071|    410|{
 1072|    410|	if (!wget_strcasecmp_ascii(val, "hard"))
  ------------------
  |  Branch (1072:6): [True: 85, False: 325]
  ------------------
 1073|     85|		*((https_enforce_mode *)opt->var) = HTTPS_ENFORCE_HARD;
 1074|    325|	else if (!wget_strcasecmp_ascii(val, "soft"))
  ------------------
  |  Branch (1074:11): [True: 210, False: 115]
  ------------------
 1075|    210|		*((https_enforce_mode *)opt->var) = HTTPS_ENFORCE_SOFT;
 1076|    115|	else if (!wget_strcasecmp_ascii(val, "none"))
  ------------------
  |  Branch (1076:11): [True: 81, False: 34]
  ------------------
 1077|     81|		*((https_enforce_mode *)opt->var) = HTTPS_ENFORCE_NONE;
 1078|     34|	else if (!val[0]) {
  ------------------
  |  Branch (1078:11): [True: 5, False: 29]
  ------------------
 1079|      5|		error_printf(_("Missing required type specifier\n"));
  ------------------
  |  |   55|      5|#define error_printf  wget_error_printf
  ------------------
              		error_printf(_("Missing required type specifier\n"));
  ------------------
  |  |   48|      5|#	define _(STRING) gettext(STRING)
  ------------------
 1080|      5|		return -1;
 1081|      5|	}
 1082|     29|	else {
 1083|     29|		error_printf(_("Invalid type specifier: %s\n"), val);
  ------------------
  |  |   55|     29|#define error_printf  wget_error_printf
  ------------------
              		error_printf(_("Invalid type specifier: %s\n"), val);
  ------------------
  |  |   48|     29|#	define _(STRING) gettext(STRING)
  ------------------
 1084|     29|		return -1;
 1085|     29|	}
 1086|       |
 1087|    376|	return 0;
 1088|    410|}
options.c:parse_included_directories:
  572|    923|{
  573|    923|	char *prefixed_val = set_char_prefix(val, INCLUDED_DIRECTORY_PREFIX);
  ------------------
  |  |   40|    923|#define INCLUDED_DIRECTORY_PREFIX '+'
  ------------------
  574|    923|	int ret = parse_stringlist_expand(opt, prefixed_val, 0, 1024);
  575|       |
  576|    923|	if (prefixed_val)
  ------------------
  |  Branch (576:6): [True: 673, False: 250]
  ------------------
  577|    673|		xfree(prefixed_val);
  ------------------
  |  |   61|    673|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 673, False: 0]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  578|       |
  579|    923|	return ret;
  580|    923|}
options.c:list_plugins:
 1233|     14|{
 1234|     14|	if (! plugin_loading_enabled)
  ------------------
  |  Branch (1234:6): [True: 0, False: 14]
  ------------------
 1235|      0|		return 0;
 1236|       |
 1237|     14|	wget_vector *v = wget_vector_create(16, NULL);
 1238|     14|	plugin_db_list(v);
 1239|       |
 1240|     14|	int n_names = wget_vector_size(v);
 1241|     14|	for (int i = 0; i < n_names; i++) {
  ------------------
  |  Branch (1241:18): [True: 0, False: 14]
  ------------------
 1242|      0|		const char *name = (const char *) wget_vector_get(v, i);
 1243|      0|		printf("%s\n", name);
 1244|      0|	}
 1245|     14|	wget_vector_free(&v);
 1246|       |
 1247|     14|	set_exit_status(EXIT_STATUS_NO_ERROR);
 1248|     14|	return -1; // stop processing & exit
 1249|     14|}
options.c:parse_local_db:
 1037|  19.3k|{
 1038|  19.3k|	int rc;
 1039|       |
 1040|  19.3k|	if ((rc = parse_bool(opt, val, invert)) < 0)
  ------------------
  |  Branch (1040:6): [True: 1, False: 19.3k]
  ------------------
 1041|      1|		return rc;
 1042|       |
 1043|  19.3k|	config.cookies =
 1044|  19.3k|	config.hsts =
 1045|  19.3k|	config.hpkp =
 1046|  19.3k|	config.ocsp =
 1047|  19.3k|	config.tls_resume = config.local_db;
 1048|       |
 1049|  19.3k|	return 0;
 1050|  19.3k|}
options.c:parse_plugin_local:
  989|    109|{
  990|    109|	dl_error_t e[1];
  991|       |
  992|    109|	if (! plugin_loading_enabled)
  ------------------
  |  Branch (992:6): [True: 0, False: 109]
  ------------------
  993|      0|		return 0;
  994|       |
  995|    109|	dl_error_init(e);
  996|       |
  997|    109|	if (! plugin_db_load_from_path(val, e)) {
  ------------------
  |  Branch (997:6): [True: 109, False: 0]
  ------------------
  998|    109|		error_printf(_("Plugin '%s' failed to load: %s\n"), val, dl_error_get_msg(e));
  ------------------
  |  |   55|    109|#define error_printf  wget_error_printf
  ------------------
              		error_printf(_("Plugin '%s' failed to load: %s\n"), val, dl_error_get_msg(e));
  ------------------
  |  |   48|    109|#	define _(STRING) gettext(STRING)
  ------------------
  999|    109|		dl_error_set(e, NULL);
 1000|    109|		return -1;
 1001|    109|	}
 1002|       |
 1003|      0|	return 0;
 1004|    109|}
options.c:parse_mirror:
  705|    517|{
  706|    517|	int rc;
  707|       |
  708|    517|	if ((rc = parse_bool(opt, val, invert)) < 0)
  ------------------
  |  Branch (708:6): [True: 1, False: 516]
  ------------------
  709|      1|		return rc;
  710|       |
  711|    516|	if (config.mirror) {
  ------------------
  |  Branch (711:6): [True: 306, False: 210]
  ------------------
  712|    306|		config.recursive = 1;
  713|    306|		config.level = 0; // INF
  714|    306|		config.timestamping = 1;
  715|    306|	} else {
  716|    210|		config.recursive = 0;
  717|    210|		config.level = 5; // default value
  718|    210|		config.timestamping = 0;
  719|    210|	}
  720|       |
  721|    516|	return 0;
  722|    517|}
options.c:parse_n_option:
  881|  1.63k|{
  882|  1.63k|	if (val) {
  ------------------
  |  Branch (882:6): [True: 1.63k, False: 0]
  ------------------
  883|  1.63k|		const char *p;
  884|       |
  885|  3.45k|		for (p = val; *p; p++) {
  ------------------
  |  Branch (885:17): [True: 1.83k, False: 1.62k]
  ------------------
  886|  1.83k|			switch (*p) {
  887|    326|			case 'v':
  ------------------
  |  Branch (887:4): [True: 326, False: 1.51k]
  ------------------
  888|    326|				config.verbose = 0;
  889|    326|				break;
  890|    238|			case 'c':
  ------------------
  |  Branch (890:4): [True: 238, False: 1.60k]
  ------------------
  891|    238|				config.clobber = 0;
  892|    238|				break;
  893|    253|			case 'd':
  ------------------
  |  Branch (893:4): [True: 253, False: 1.58k]
  ------------------
  894|    253|				config.directories = 0;
  895|    253|				break;
  896|    420|			case 'H':
  ------------------
  |  Branch (896:4): [True: 420, False: 1.41k]
  ------------------
  897|    420|				config.host_directories = 0;
  898|    420|				break;
  899|    585|			case 'p':
  ------------------
  |  Branch (899:4): [True: 585, False: 1.25k]
  ------------------
  900|    585|				config.parent = 0;
  901|    585|				break;
  902|     17|			default:
  ------------------
  |  Branch (902:4): [True: 17, False: 1.82k]
  ------------------
  903|     17|				error_printf(_("Unknown option '-n%c'\n"), *p);
  ------------------
  |  |   55|     17|#define error_printf  wget_error_printf
  ------------------
              				error_printf(_("Unknown option '-n%c'\n"), *p);
  ------------------
  |  |   48|     17|#	define _(STRING) gettext(STRING)
  ------------------
  904|     17|				return -1;
  905|  1.83k|			}
  906|       |
  907|  1.82k|			debug_printf("name=-n%c value=0\n", *p);
  ------------------
  |  |   57|  1.82k|#define debug_printf wget_debug_printf
  ------------------
  908|  1.82k|		}
  909|  1.63k|	}
  910|       |
  911|  1.62k|	return 0;
  912|  1.63k|}
options.c:parse_plugin:
  971|     67|{
  972|     67|	dl_error_t e[1];
  973|       |
  974|     67|	if (! plugin_loading_enabled)
  ------------------
  |  Branch (974:6): [True: 0, False: 67]
  ------------------
  975|      0|		return 0;
  976|       |
  977|     67|	dl_error_init(e);
  978|       |
  979|     67|	if (! plugin_db_load_from_name(val, e)) {
  ------------------
  |  Branch (979:6): [True: 67, False: 0]
  ------------------
  980|     67|		error_printf(_("Plugin '%s' failed to load: %s\n"), val, dl_error_get_msg(e));
  ------------------
  |  |   55|     67|#define error_printf  wget_error_printf
  ------------------
              		error_printf(_("Plugin '%s' failed to load: %s\n"), val, dl_error_get_msg(e));
  ------------------
  |  |   48|     67|#	define _(STRING) gettext(STRING)
  ------------------
  981|     67|		dl_error_set(e, NULL);
  982|     67|		return -1;
  983|     67|	}
  984|       |
  985|      0|	return 0;
  986|     67|}
options.c:parse_plugin_dirs:
 1007|    636|{
 1008|    636|	if (! plugin_loading_enabled)
  ------------------
  |  Branch (1008:6): [True: 0, False: 636]
  ------------------
 1009|      0|		return 0;
 1010|       |
 1011|    636|	plugin_db_clear_search_paths();
 1012|    636|	plugin_db_add_search_paths(val, ',');
 1013|       |
 1014|    636|	return 0;
 1015|    636|}
options.c:print_plugin_help:
 1253|      2|{
 1254|      2|	if (! plugin_loading_enabled)
  ------------------
  |  Branch (1254:6): [True: 0, False: 2]
  ------------------
 1255|      0|		return 0;
 1256|       |
 1257|      2|	plugin_db_show_help();
 1258|       |
 1259|      2|	set_exit_status(EXIT_STATUS_NO_ERROR);
 1260|      2|	return -1; // stop processing & exit
 1261|      2|}
options.c:parse_plugin_option:
 1019|     58|{
 1020|     58|	dl_error_t e[1];
 1021|       |
 1022|     58|	if (! plugin_loading_enabled)
  ------------------
  |  Branch (1022:6): [True: 0, False: 58]
  ------------------
 1023|      0|		return 0;
 1024|       |
 1025|     58|	dl_error_init(e);
 1026|       |
 1027|     58|	if (plugin_db_forward_option(val, e) < 0) {
  ------------------
  |  Branch (1027:6): [True: 58, False: 0]
  ------------------
 1028|     58|		error_printf("%s\n", dl_error_get_msg(e)); // no translation
  ------------------
  |  |   55|     58|#define error_printf  wget_error_printf
  ------------------
 1029|     58|		dl_error_set(e, NULL);
 1030|     58|		return -1;
 1031|     58|	}
 1032|       |
 1033|      0|	return 0;
 1034|     58|}
options.c:parse_prefer_family:
  915|    526|{
  916|    526|	if (!val || !wget_strcasecmp_ascii(val, "none"))
  ------------------
  |  Branch (916:6): [True: 0, False: 526]
  |  Branch (916:14): [True: 83, False: 443]
  ------------------
  917|     83|		*((int *)opt->var) = WGET_NET_FAMILY_ANY;
  ------------------
  |  | 1882|     83|#define WGET_NET_FAMILY_ANY  0
  ------------------
  918|    443|	else if (!wget_strcasecmp_ascii(val, "ipv4"))
  ------------------
  |  Branch (918:11): [True: 210, False: 233]
  ------------------
  919|    210|		*((int *)opt->var) = WGET_NET_FAMILY_IPV4;
  ------------------
  |  | 1883|    210|#define WGET_NET_FAMILY_IPV4 1
  ------------------
  920|    233|	else if (!wget_strcasecmp_ascii(val, "ipv6"))
  ------------------
  |  Branch (920:11): [True: 213, False: 20]
  ------------------
  921|    213|		*((int *)opt->var) = WGET_NET_FAMILY_IPV6;
  ------------------
  |  | 1884|    213|#define WGET_NET_FAMILY_IPV6 2
  ------------------
  922|     20|	else {
  923|     20|		error_printf(_("Unknown address family '%s'\n"), val);
  ------------------
  |  |   55|     20|#define error_printf  wget_error_printf
  ------------------
              		error_printf(_("Unknown address family '%s'\n"), val);
  ------------------
  |  |   48|     20|#	define _(STRING) gettext(STRING)
  ------------------
  924|     20|		return -1;
  925|     20|	}
  926|       |
  927|    506|	return 0;
  928|    526|}
options.c:parse_progress_type:
  793|  1.00k|{
  794|  1.00k|	if (!val || !*val) {
  ------------------
  |  Branch (794:6): [True: 0, False: 1.00k]
  |  Branch (794:14): [True: 4, False: 1.00k]
  ------------------
  795|      4|		error_printf(_("Empty progress type\n"));
  ------------------
  |  |   55|      4|#define error_printf  wget_error_printf
  ------------------
              		error_printf(_("Empty progress type\n"));
  ------------------
  |  |   48|      4|#	define _(STRING) gettext(STRING)
  ------------------
  796|      4|		return -1;
  797|      4|	}
  798|       |
  799|  1.00k|	if (!wget_strcasecmp_ascii(val, "none"))
  ------------------
  |  Branch (799:6): [True: 210, False: 790]
  ------------------
  800|    210|		*((char *)opt->var) = PROGRESS_TYPE_NONE;
  ------------------
  |  |   31|    210|#define PROGRESS_TYPE_NONE  0
  ------------------
  801|    790|	else if (!wget_strncasecmp_ascii(val, "bar", 3)) {
  ------------------
  |  Branch (801:11): [True: 546, False: 244]
  ------------------
  802|    546|		*((char *)opt->var) = PROGRESS_TYPE_BAR;
  ------------------
  |  |   32|    546|#define PROGRESS_TYPE_BAR   1
  ------------------
  803|       |		// Silent Wget compatibility
  804|    546|		if (!wget_strncasecmp_ascii(val+3, ":force", 6) || !wget_strncasecmp_ascii(val+3, ":noscroll:force", 15)) {
  ------------------
  |  Branch (804:7): [True: 210, False: 336]
  |  Branch (804:54): [True: 0, False: 336]
  ------------------
  805|    210|			config.force_progress = true;
  806|    210|		}
  807|    546|	} else if (!wget_strcasecmp_ascii(val, "dot")) {
  ------------------
  |  Branch (807:13): [True: 210, False: 34]
  ------------------
  808|       |		// Wget compatibility, whether want to support 'dot' depends on user feedback.
  809|    210|		info_printf(_("Progress type '%s' ignored. It is not implemented yet\n"), val);
  ------------------
  |  |   54|    210|#define info_printf wget_info_printf
  ------------------
              		info_printf(_("Progress type '%s' ignored. It is not implemented yet\n"), val);
  ------------------
  |  |   48|    210|#	define _(STRING) gettext(STRING)
  ------------------
  810|    210|	} else {
  811|     34|		error_printf(_("Unknown progress type '%s'\n"), val);
  ------------------
  |  |   55|     34|#define error_printf  wget_error_printf
  ------------------
              		error_printf(_("Unknown progress type '%s'\n"), val);
  ------------------
  |  |   48|     34|#	define _(STRING) gettext(STRING)
  ------------------
  812|     34|		return -1;
  813|     34|	}
  814|       |
  815|    966|	return 0;
  816|  1.00k|}
options.c:parse_proxy:
 2684|  6.20k|{
 2685|  6.20k|	if (parse_bool(opt, val, invert) < 0) {
  ------------------
  |  Branch (2685:6): [True: 2.05k, False: 4.15k]
  ------------------
 2686|  2.05k|		if (invert) {
  ------------------
  |  Branch (2686:7): [True: 344, False: 1.70k]
  ------------------
 2687|       |			// the strdup'ed string will be released on program exit
 2688|    344|			xfree(config.no_proxy);
  ------------------
  |  |   61|    344|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 241, False: 103]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2689|    344|			config.no_proxy = val ? wget_strdup(val) : NULL;
  ------------------
  |  Branch (2689:22): [True: 344, False: 0]
  ------------------
 2690|  1.70k|		} else {
 2691|  1.70k|			if((opt = bsearch("http-proxy", options, countof(options), sizeof(options[0]), opt_compare)))
  ------------------
  |  |   64|  1.70k|#define countof(a) (sizeof(a)/sizeof(*(a)))
  ------------------
  |  Branch (2691:7): [True: 1.70k, False: 0]
  ------------------
 2692|  1.70k|				return parse_string(opt, val, invert);
 2693|      0|			if((opt = bsearch("https-proxy", options, countof(options), sizeof(options[0]), opt_compare)))
  ------------------
  |  |   64|      0|#define countof(a) (sizeof(a)/sizeof(*(a)))
  ------------------
  |  Branch (2693:7): [True: 0, False: 0]
  ------------------
 2694|      0|				return parse_string(opt, val, invert);
 2695|      0|		}
 2696|  2.05k|	}
 2697|       |
 2698|  4.49k|	return 0;
 2699|  6.20k|}
options.c:parse_regex_type:
  776|    236|{
  777|    236|	if (!val || !wget_strcasecmp_ascii(val, "posix"))
  ------------------
  |  Branch (777:6): [True: 0, False: 236]
  |  Branch (777:14): [True: 216, False: 20]
  ------------------
  778|    216|		*((char *)opt->var) = WGET_REGEX_TYPE_POSIX;
  ------------------
  |  | 2872|    216|#define WGET_REGEX_TYPE_POSIX 0
  ------------------
  779|       |
  780|       |#if defined WITH_LIBPCRE2 || defined WITH_LIBPCRE
  781|       |	else if (!wget_strcasecmp_ascii(val, "pcre"))
  782|       |		*((char *)opt->var) = WGET_REGEX_TYPE_PCRE;
  783|       |#endif
  784|     20|	else {
  785|     20|		error_printf(_("Unsupported regex type '%s'\n"), val);
  ------------------
  |  |   55|     20|#define error_printf  wget_error_printf
  ------------------
              		error_printf(_("Unsupported regex type '%s'\n"), val);
  ------------------
  |  |   48|     20|#	define _(STRING) gettext(STRING)
  ------------------
  786|     20|		return -1;
  787|     20|	}
  788|       |
  789|    216|	return 0;
  790|    236|}
options.c:parse_report_speed_type:
 1053|    448|{
 1054|    448|	if (!wget_strcasecmp_ascii(val, "bytes"))
  ------------------
  |  Branch (1054:6): [True: 210, False: 238]
  ------------------
 1055|    210|		*((wget_report_speed *)opt->var) = WGET_REPORT_SPEED_BYTES;
 1056|    238|	else if (!wget_strcasecmp_ascii(val, "bits"))
  ------------------
  |  Branch (1056:11): [True: 216, False: 22]
  ------------------
 1057|    216|		*((wget_report_speed *)opt->var) = WGET_REPORT_SPEED_BITS;
 1058|     22|	else if (!val[0]) {
  ------------------
  |  Branch (1058:11): [True: 4, False: 18]
  ------------------
 1059|      4|		error_printf(_("Missing required type specifier\n"));
  ------------------
  |  |   55|      4|#define error_printf  wget_error_printf
  ------------------
              		error_printf(_("Missing required type specifier\n"));
  ------------------
  |  |   48|      4|#	define _(STRING) gettext(STRING)
  ------------------
 1060|      4|		return -1;
 1061|      4|	}
 1062|     18|	else {
 1063|     18|		error_printf(_("Invalid type specifier: %s\n"), val);
  ------------------
  |  |   55|     18|#define error_printf  wget_error_printf
  ------------------
              		error_printf(_("Invalid type specifier: %s\n"), val);
  ------------------
  |  |   48|     18|#	define _(STRING) gettext(STRING)
  ------------------
 1064|     18|		return -1;
 1065|     18|	}
 1066|       |
 1067|    426|	return 0;
 1068|    448|}
options.c:parse_restrict_names:
  820|  1.17k|{
  821|  1.17k|	int flags = WGET_RESTRICT_NAMES_NONE;
  ------------------
  |  |  302|  1.17k|#define WGET_RESTRICT_NAMES_NONE          0
  ------------------
  822|       |
  823|  1.17k|	if (!val || !*val) {
  ------------------
  |  Branch (823:6): [True: 0, False: 1.17k]
  |  Branch (823:14): [True: 4, False: 1.17k]
  ------------------
  824|      4|		error_printf(_("Missing restrict-file-name type\n"));
  ------------------
  |  |   55|      4|#define error_printf  wget_error_printf
  ------------------
              		error_printf(_("Missing restrict-file-name type\n"));
  ------------------
  |  |   48|      4|#	define _(STRING) gettext(STRING)
  ------------------
  825|      4|		goto error;
  826|      4|	}
  827|       |
  828|       |	// Reset restrictions to default
  829|  1.17k|	if (!wget_strcasecmp_ascii(val, "none")) {
  ------------------
  |  Branch (829:6): [True: 210, False: 960]
  ------------------
  830|    210|		*((int *)opt->var) = WGET_RESTRICT_NAMES_NONE;
  ------------------
  |  |  302|    210|#define WGET_RESTRICT_NAMES_NONE          0
  ------------------
  831|    210|		return 0;
  832|    210|	}
  833|       |
  834|    960|	const char *s, *p;
  835|  3.04k|	for (s = p = val; *p; s = p + 1) {
  ------------------
  |  Branch (835:20): [True: 2.12k, False: 923]
  ------------------
  836|  2.12k|		if ((p = strchrnul(s, ',')) == s)
  ------------------
  |  Branch (836:7): [True: 461, False: 1.66k]
  ------------------
  837|    461|			continue;
  838|       |
  839|  1.66k|		size_t len = p - s;
  840|       |
  841|  1.66k|		if (!wget_strncasecmp_ascii(s, "unix", len))
  ------------------
  |  Branch (841:7): [True: 280, False: 1.38k]
  ------------------
  842|    280|			flags |= WGET_RESTRICT_NAMES_UNIX;
  ------------------
  |  |  303|    280|#define WGET_RESTRICT_NAMES_UNIX       1<<0
  ------------------
  843|  1.38k|		else if (!wget_strncasecmp_ascii(s, "windows", len))
  ------------------
  |  Branch (843:12): [True: 248, False: 1.13k]
  ------------------
  844|    248|			flags |= WGET_RESTRICT_NAMES_WINDOWS;
  ------------------
  |  |  304|    248|#define WGET_RESTRICT_NAMES_WINDOWS    1<<1
  ------------------
  845|  1.13k|		else if (!wget_strncasecmp_ascii(s, "nocontrol", len))
  ------------------
  |  Branch (845:12): [True: 211, False: 924]
  ------------------
  846|    211|			flags |= WGET_RESTRICT_NAMES_NOCONTROL;
  ------------------
  |  |  305|    211|#define WGET_RESTRICT_NAMES_NOCONTROL  1<<2
  ------------------
  847|    924|		else if (!wget_strncasecmp_ascii(s, "ascii", len))
  ------------------
  |  Branch (847:12): [True: 207, False: 717]
  ------------------
  848|    207|			flags |= WGET_RESTRICT_NAMES_ASCII;
  ------------------
  |  |  306|    207|#define WGET_RESTRICT_NAMES_ASCII      1<<3
  ------------------
  849|    717|		else if (!wget_strncasecmp_ascii(s, "uppercase", len))
  ------------------
  |  Branch (849:12): [True: 432, False: 285]
  ------------------
  850|    432|			flags |= WGET_RESTRICT_NAMES_UPPERCASE;
  ------------------
  |  |  307|    432|#define WGET_RESTRICT_NAMES_UPPERCASE  1<<4
  ------------------
  851|    285|		else if (!wget_strncasecmp_ascii(s, "lowercase", len))
  ------------------
  |  Branch (851:12): [True: 248, False: 37]
  ------------------
  852|    248|			flags |= WGET_RESTRICT_NAMES_LOWERCASE;
  ------------------
  |  |  308|    248|#define WGET_RESTRICT_NAMES_LOWERCASE  1<<5
  ------------------
  853|     37|		else {
  854|     37|			error_printf(_("Unknown restrict-file-name type '%s'\n"), val);
  ------------------
  |  |   55|     37|#define error_printf  wget_error_printf
  ------------------
              			error_printf(_("Unknown restrict-file-name type '%s'\n"), val);
  ------------------
  |  |   48|     37|#	define _(STRING) gettext(STRING)
  ------------------
  855|     37|			goto error;
  856|     37|		}
  857|  1.66k|	}
  858|       |
  859|    923|	if ((flags & WGET_RESTRICT_NAMES_UNIX) && (flags & WGET_RESTRICT_NAMES_WINDOWS)) {
  ------------------
  |  |  303|    923|#define WGET_RESTRICT_NAMES_UNIX       1<<0
  ------------------
              	if ((flags & WGET_RESTRICT_NAMES_UNIX) && (flags & WGET_RESTRICT_NAMES_WINDOWS)) {
  ------------------
  |  |  304|    244|#define WGET_RESTRICT_NAMES_WINDOWS    1<<1
  ------------------
  |  Branch (859:6): [True: 244, False: 679]
  |  Branch (859:44): [True: 1, False: 243]
  ------------------
  860|      1|		error_printf(_("Restrict file names to either 'unix' or 'windows'\n"));
  ------------------
  |  |   55|      1|#define error_printf  wget_error_printf
  ------------------
              		error_printf(_("Restrict file names to either 'unix' or 'windows'\n"));
  ------------------
  |  |   48|      1|#	define _(STRING) gettext(STRING)
  ------------------
  861|      1|		goto error;
  862|      1|	}
  863|       |
  864|    922|	if ((flags & WGET_RESTRICT_NAMES_UPPERCASE) && (flags & WGET_RESTRICT_NAMES_LOWERCASE)) {
  ------------------
  |  |  307|    922|#define WGET_RESTRICT_NAMES_UPPERCASE  1<<4
  ------------------
              	if ((flags & WGET_RESTRICT_NAMES_UPPERCASE) && (flags & WGET_RESTRICT_NAMES_LOWERCASE)) {
  ------------------
  |  |  308|    238|#define WGET_RESTRICT_NAMES_LOWERCASE  1<<5
  ------------------
  |  Branch (864:6): [True: 238, False: 684]
  |  Branch (864:49): [True: 2, False: 236]
  ------------------
  865|      2|		error_printf(_("Restrict file names to either 'uppercase' or 'lowercase'\n"));
  ------------------
  |  |   55|      2|#define error_printf  wget_error_printf
  ------------------
              		error_printf(_("Restrict file names to either 'uppercase' or 'lowercase'\n"));
  ------------------
  |  |   48|      2|#	define _(STRING) gettext(STRING)
  ------------------
  866|      2|		goto error;
  867|      2|	}
  868|       |
  869|    920|	*((int *)opt->var) = flags;
  870|       |
  871|    920|	return 0;
  872|       |
  873|     44|error:
  874|     44|	error_printf(_("    use [none]|[unix|windows],[lowercase|uppercase],[nocontrol][,ascii].\n"));
  ------------------
  |  |   55|     44|#define error_printf  wget_error_printf
  ------------------
              	error_printf(_("    use [none]|[unix|windows],[lowercase|uppercase],[nocontrol][,ascii].\n"));
  ------------------
  |  |   48|     44|#	define _(STRING) gettext(STRING)
  ------------------
  875|     44|	return -1;
  876|    922|}
options.c:print_version:
  144|      1|{
  145|       |#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
  146|       |	puts("GNU Wget2 " PACKAGE_VERSION " - multithreaded metalink/file/website downloader\n");
  147|       |	const char version_info[] =
  148|       |	"+digest"
  149|       |
  150|       |#if defined WITH_GNUTLS
  151|       |	" +https"
  152|       |	" +ssl/gnutls"
  153|       |#elif defined WITH_OPENSSL
  154|       |	" +https"
  155|       |	" +ssl/openssl"
  156|       |#elif defined WITH_WOLFSSL
  157|       |	" +https"
  158|       |	" +ssl/wolfssl"
  159|       |#else
  160|       |	" -https"
  161|       |	" -ssl"
  162|       |#endif
  163|       |
  164|       |	" +ipv6"
  165|       |	" +iri"
  166|       |
  167|       |#if SIZEOF_OFF_T >= 8
  168|       |	" +large-file"
  169|       |#else
  170|       |	" -large-file"
  171|       |#endif
  172|       |
  173|       |#if defined ENABLE_NLS
  174|       |	" +nls"
  175|       |#else
  176|       |	" -nls"
  177|       |#endif
  178|       |
  179|       |#if defined ENABLE_NTLM
  180|       |  " +ntlm"
  181|       |#else
  182|       |  " -ntlm"
  183|       |#endif
  184|       |
  185|       |#if defined ENABLE_OPIE
  186|       |	" +opie"
  187|       |#else
  188|       |	" -opie"
  189|       |#endif
  190|       |
  191|       |#if defined WITH_LIBPSL
  192|       |	" +psl"
  193|       |#else
  194|       |	" -psl"
  195|       |#endif
  196|       |
  197|       |#if defined WITH_LIBHSTS
  198|       |	" +hsts\n"
  199|       |#else
  200|       |	" -hsts\n"
  201|       |#endif
  202|       |
  203|       |#if defined HAVE_ICONV
  204|       |	"+iconv"
  205|       |#else
  206|       |	"-iconv"
  207|       |#endif
  208|       |
  209|       |#if defined WITH_LIBIDN2
  210|       |	" +idn2"
  211|       |#elif defined WITH_LIBIDN
  212|       |	" +idn"
  213|       |#else
  214|       |	" -idn"
  215|       |#endif
  216|       |
  217|       |#if defined WITH_ZLIB
  218|       |	" +zlib"
  219|       |#else
  220|       |	" -zlib"
  221|       |#endif
  222|       |
  223|       |#if defined WITH_LZMA
  224|       |	" +lzma"
  225|       |#else
  226|       |	" -lzma"
  227|       |#endif
  228|       |
  229|       |#if defined WITH_BROTLIDEC
  230|       |	" +brotlidec"
  231|       |#else
  232|       |	" -brotlidec"
  233|       |#endif
  234|       |
  235|       |#if defined WITH_ZSTD
  236|       |	" +zstd"
  237|       |#else
  238|       |	" -zstd"
  239|       |#endif
  240|       |
  241|       |#if defined WITH_BZIP2
  242|       |	" +bzip2"
  243|       |#else
  244|       |	" -bzip2"
  245|       |#endif
  246|       |
  247|       |#if defined WITH_LZIP
  248|       |	" +lzip"
  249|       |#else
  250|       |	" -lzip"
  251|       |#endif
  252|       |
  253|       |#if defined WITH_LIBNGHTTP2
  254|       |	" +http2"
  255|       |#else
  256|       |	" -http2"
  257|       |#endif
  258|       |
  259|       |#if defined WITH_GPGME
  260|       |	" +gpgme"
  261|       |#else
  262|       |	" -gpgme"
  263|       |#endif
  264|       |	;
  265|       |
  266|       |	puts(version_info);
  267|       |	puts(version_text);
  268|       |
  269|       |#endif // #ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
  270|       |
  271|      1|	set_exit_status(EXIT_STATUS_NO_ERROR);
  272|      1|	return -1; // stop processing & exit
  273|      1|}
options.c:opt_compare_config:
 2547|   416k|{
 2548|   416k|	return wget_strcasecmp_ascii(key, ((option_t) option)->long_name);
 2549|   416k|}
options.c:opt_compare_config_linear:
 2552|  1.26M|{
 2553|  1.26M|	const char *s1 = key, *s2 = command;
 2554|       |
 2555|  1.58M|	for (; *s1 && *s2; s1++, s2++) {
  ------------------
  |  Branch (2555:9): [True: 1.55M, False: 35.1k]
  |  Branch (2555:16): [True: 1.55M, False: 1.42k]
  ------------------
 2556|  1.55M|		if (*s2 == '-' || *s2 == '_') {
  ------------------
  |  Branch (2556:7): [True: 24.3k, False: 1.52M]
  |  Branch (2556:21): [True: 0, False: 1.52M]
  ------------------
 2557|  24.3k|			if (*s1 == '-' || *s1 == '_')
  ------------------
  |  Branch (2557:8): [True: 661, False: 23.6k]
  |  Branch (2557:22): [True: 243, False: 23.3k]
  ------------------
 2558|    904|				s1++;
 2559|  24.3k|			s2++;
 2560|  24.3k|		}
 2561|       |
 2562|  1.55M|		if (!*s1 || !*s2 || c_tolower(*s1) != *s2) break;
  ------------------
  |  Branch (2562:7): [True: 55, False: 1.55M]
  |  Branch (2562:15): [True: 0, False: 1.55M]
  |  Branch (2562:23): [True: 1.22M, False: 327k]
  ------------------
 2563|       |		// *s2 is guaranteed to be lower case so convert *s1 to lower case
 2564|  1.55M|	}
 2565|       |
 2566|  1.26M|	return *s1 != *s2; // no need for tolower() here
 2567|  1.26M|}
options.c:set_allocation_functions:
 4338|  9.59k|{
 4339|  9.59k|	wget_malloc_fn = my_malloc;
 4340|  9.59k|	wget_calloc_fn = my_calloc;
 4341|  9.59k|	wget_realloc_fn = my_realloc;
 4342|  9.59k|	wget_free = my_free;
 4343|  9.59k|}
options.c:my_malloc:
 4301|   327k|{
 4302|   327k|	void *p = malloc(size) ; // space before ; is intentional to trick out syntax-check
 4303|       |
 4304|   327k|	if (p)
  ------------------
  |  Branch (4304:6): [True: 327k, False: 0]
  ------------------
 4305|   327k|		return p;
 4306|       |
 4307|      0|	no_memory();
 4308|   327k|}
options.c:my_calloc:
 4312|  57.0k|{
 4313|  57.0k|	void *p = calloc(nmemb, size) ; // space before ; is intentional to trick out syntax-check
 4314|       |
 4315|  57.0k|	if (p)
  ------------------
  |  Branch (4315:6): [True: 57.0k, False: 0]
  ------------------
 4316|  57.0k|		return p;
 4317|       |
 4318|      0|	no_memory();
 4319|  57.0k|}
options.c:my_realloc:
 4323|  72.1k|{
 4324|  72.1k|	void *p = realloc(ptr, size) ; // space before ; is intentional to trick out syntax-check
 4325|       |
 4326|  72.1k|	if (p || (ptr && size == 0))
  ------------------
  |  Branch (4326:6): [True: 72.1k, False: 0]
  |  Branch (4326:12): [True: 0, False: 0]
  |  Branch (4326:19): [True: 0, False: 0]
  ------------------
 4327|  72.1k|		return p;
 4328|       |
 4329|      0|	no_memory();
 4330|  72.1k|}
options.c:my_free:
 4333|   335k|{
 4334|   335k|	free(ptr) ; // space before ; is intentional to trick out syntax-check
 4335|   335k|}

plugin_db_add_search_paths:
   76|    636|{
   77|    636|	split_string(paths, separator, search_paths);
   78|    636|}
plugin_db_clear_search_paths:
   82|    636|{
   83|    636|	wget_vector_clear(search_paths);
   84|    636|}
plugin_db_load_from_path:
  328|    109|{
  329|    109|	char *name = dl_get_name_from_path(path, 0);
  330|    109|	plugin_t *plugin = load_plugin(name, path, e);
  331|    109|	wget_free(name);
  332|    109|	return plugin;
  333|    109|}
plugin_db_load_from_name:
  338|     67|{
  339|       |	// Search where the plugin is
  340|     67|	plugin_t *plugin;
  341|       |
  342|     67|	char *filename = dl_search(name, search_paths);
  343|     67|	if (! filename) {
  ------------------
  |  Branch (343:6): [True: 67, False: 0]
  ------------------
  344|     67|		dl_error_set_printf(e, "Plugin '%s' not found in any of the plugin search paths.",
  345|     67|				name);
  346|     67|		return NULL;
  347|     67|	}
  348|       |
  349|       |	// Delegate
  350|      0|	plugin = load_plugin(name, filename, e);
  351|      0|	wget_free(filename);
  352|      0|	return plugin;
  353|     67|}
plugin_db_load_from_envvar:
  358|  9.59k|{
  359|  9.59k|	dl_error_t e[1];
  360|  9.59k|	wget_vector *v;
  361|  9.59k|	const char *str;
  362|  9.59k|	int ret = 0;
  363|       |
  364|       |	// Fetch from environment variable
  365|  9.59k|	str = getenv(plugin_list_envvar);
  366|       |
  367|  9.59k|	if (str) {
  ------------------
  |  Branch (367:6): [True: 0, False: 9.59k]
  ------------------
  368|       |#ifdef _WIN32
  369|       |		char sep = ';';
  370|       |#else
  371|      0|		char sep = ':';
  372|      0|#endif
  373|      0|		dl_error_init(e);
  374|       |
  375|       |		// Split the value
  376|      0|		v = wget_vector_create(16, NULL);
  377|      0|		split_string(str, sep, v);
  378|       |
  379|       |		// Load each plugin
  380|      0|		for (int i = 0; i < wget_vector_size(v) && ret == 0; i++) {
  ------------------
  |  Branch (380:19): [True: 0, False: 0]
  |  Branch (380:46): [True: 0, False: 0]
  ------------------
  381|      0|			plugin_t *plugin;
  382|      0|			int local = 0;
  383|       |
  384|      0|			str = (const char *) wget_vector_get(v, i);
  385|      0|			if (strchr(str, '/'))
  ------------------
  |  Branch (385:8): [True: 0, False: 0]
  ------------------
  386|      0|				local = 1;
  387|       |#ifdef _WIN32
  388|       |			if (strchr(str, '\\'))
  389|       |				local = 1;
  390|       |#endif
  391|      0|			if (local)
  ------------------
  |  Branch (391:8): [True: 0, False: 0]
  ------------------
  392|      0|				plugin = plugin_db_load_from_path(str, e);
  393|      0|			else
  394|      0|				plugin = plugin_db_load_from_name(str, e);
  395|       |
  396|      0|			if (! plugin) {
  ------------------
  |  Branch (396:8): [True: 0, False: 0]
  ------------------
  397|      0|				wget_error_printf(_("Plugin '%s' failed to load: %s"), str, dl_error_get_msg(e));
  ------------------
  |  |   48|      0|#	define _(STRING) gettext(STRING)
  ------------------
  398|      0|				dl_error_set(e, NULL);
  399|      0|				ret = -1;
  400|      0|			}
  401|      0|		}
  402|       |
  403|      0|		wget_vector_free(&v);
  404|      0|	}
  405|       |
  406|  9.59k|	return ret;
  407|  9.59k|}
plugin_db_list:
  411|     14|{
  412|     14|	dl_list(search_paths, names_out);
  413|     14|}
plugin_db_forward_option:
  417|     58|{
  418|     58|	char *plugin_option_copy;
  419|     58|	char *plugin_name, *option, *value;
  420|     58|	char *ptr;
  421|     58|	plugin_t *plugin;
  422|     58|	plugin_priv_t *priv;
  423|     58|	int op_res;
  424|       |
  425|       |	// Create writable copy of the input
  426|     58|	plugin_option_copy = wget_strdup(plugin_option);
  427|       |
  428|       |	// Get plugin name
  429|     58|	ptr = strchr(plugin_option_copy, '.');
  430|     58|	if (! ptr) {
  ------------------
  |  Branch (430:6): [True: 3, False: 55]
  ------------------
  431|      3|		dl_error_set_printf(e, "'%s': '.' is missing (separates plugin name and option)", plugin_option);
  432|      3|		wget_free(plugin_option_copy);
  433|      3|		return -1;
  434|      3|	}
  435|     55|	if (ptr == plugin_option_copy) {
  ------------------
  |  Branch (435:6): [True: 1, False: 54]
  ------------------
  436|      1|		dl_error_set_printf(e, "'%s': Plugin name is missing.", plugin_option);
  437|      1|		wget_free(plugin_option_copy);
  438|      1|		return -1;
  439|      1|	}
  440|     54|	*ptr = 0;
  441|     54|	plugin_name = plugin_option_copy;
  442|       |
  443|       |	// Split plugin option and value
  444|     54|	option = ptr + 1;
  445|     54|	ptr = strchr(option, '=');
  446|     54|	if (ptr) {
  ------------------
  |  Branch (446:6): [True: 3, False: 51]
  ------------------
  447|      3|		*ptr = 0;
  448|      3|		value = ptr + 1;
  449|     51|	} else {
  450|     51|		value = NULL;
  451|     51|	}
  452|     54|	if (*option == 0) {
  ------------------
  |  Branch (452:6): [True: 3, False: 51]
  ------------------
  453|      3|		dl_error_set_printf(e, "'%s': An option is required (after '.', and before '=' if present)",
  454|      3|				plugin_option);
  455|      3|		wget_free(plugin_option_copy);
  456|      3|		return -1;
  457|      3|	}
  458|       |
  459|       |	// Handle '--help'
  460|     51|	if (strcmp(option, "help") == 0) {
  ------------------
  |  Branch (460:6): [True: 2, False: 49]
  ------------------
  461|      2|		if (value) {
  ------------------
  |  Branch (461:7): [True: 1, False: 1]
  ------------------
  462|      1|			dl_error_set_printf(e, "'help' option does not accept arguments\n");
  463|      1|			wget_free(plugin_option_copy);
  464|      1|			return -1;
  465|      1|		}
  466|      1|		plugin_help_forwarded = 1;
  467|      1|	}
  468|       |
  469|       |	// Search for plugin
  470|     50|	if (!wget_stringmap_get(plugin_name_index, plugin_name, &plugin)) {
  ------------------
  |  |  880|     50|#define wget_stringmap_get(h, k, v) wget_stringmap_get((h), (k), (void **)(v))
  ------------------
  |  Branch (470:6): [True: 50, False: 0]
  ------------------
  471|     50|		dl_error_set_printf(e, "Plugin '%s' is not loaded.", plugin_name);
  472|     50|		wget_free(plugin_option_copy);
  473|     50|		return -1;
  474|     50|	}
  475|      0|	priv = (plugin_priv_t *) plugin;
  476|      0|	if (! priv->argp) {
  ------------------
  |  Branch (476:6): [True: 0, False: 0]
  ------------------
  477|      0|		dl_error_set_printf(e, "Plugin '%s' does not accept options.", plugin->name);
  478|      0|		wget_free(plugin_option_copy);
  479|      0|		return -1;
  480|      0|	}
  481|       |
  482|      0|	op_res = priv->argp((wget_plugin *) plugin, option, value);
  483|       |
  484|      0|	if (op_res < 0)
  ------------------
  |  Branch (484:6): [True: 0, False: 0]
  ------------------
  485|      0|	{
  486|      0|		dl_error_set_printf(e, "Plugin '%s' did not accept option '%s'",
  487|      0|				plugin->name, strchrnul(plugin_option, '.'));
  488|      0|		wget_free(plugin_option_copy);
  489|      0|		return -1;
  490|      0|	}
  491|       |
  492|      0|	wget_free(plugin_option_copy);
  493|      0|	return 0;
  494|      0|}
plugin_db_show_help:
  498|      2|{
  499|      2|	int n_plugins = wget_vector_size(plugin_list);
  500|       |
  501|      2|	for (int i = 0; i < n_plugins; i++) {
  ------------------
  |  Branch (501:18): [True: 0, False: 2]
  ------------------
  502|      0|		plugin_t *plugin = (plugin_t *) wget_vector_get(plugin_list, i);
  503|      0|		plugin_priv_t *priv = (plugin_priv_t *) plugin;
  504|      0|		if (priv->argp) {
  ------------------
  |  Branch (504:7): [True: 0, False: 0]
  ------------------
  505|      0|			printf(_("Options for %s:\n"), plugin->name);
  ------------------
  |  |   48|      0|#	define _(STRING) gettext(STRING)
  ------------------
  506|      0|			priv->argp((wget_plugin *) plugin, "help", NULL);
  507|      0|			printf("\n");
  508|      0|		}
  509|      0|	}
  510|      2|	plugin_help_forwarded = 1;
  511|      2|}
plugin_db_help_forwarded:
  515|  9.59k|{
  516|  9.59k|	return plugin_help_forwarded;
  517|  9.59k|}
plugin_db_init:
  592|  9.59k|{
  593|  9.59k|	if (! initialized) {
  ------------------
  |  Branch (593:6): [True: 9.59k, False: 0]
  ------------------
  594|  9.59k|		search_paths = wget_vector_create(16, NULL);
  595|  9.59k|		plugin_list = wget_vector_create(16, NULL);
  596|  9.59k|		wget_vector_set_destructor(plugin_list, (wget_vector_destructor *) plugin_free);
  597|  9.59k|		plugin_name_index = wget_stringmap_create(16);
  598|  9.59k|		wget_stringmap_set_key_destructor(plugin_name_index, NULL);
  599|  9.59k|		wget_stringmap_set_value_destructor(plugin_name_index, NULL);
  600|  9.59k|		plugin_help_forwarded = 0;
  601|       |
  602|  9.59k|		initialized = 1;
  603|  9.59k|	}
  604|  9.59k|}
plugin_db_finalize:
  608|  9.59k|{
  609|  9.59k|	if (! initialized)
  ------------------
  |  Branch (609:6): [True: 0, False: 9.59k]
  ------------------
  610|      0|		return;
  611|       |
  612|  9.59k|	int n_plugins = wget_vector_size(plugin_list);
  613|       |
  614|  9.59k|	for (int i = 0; i < n_plugins; i++) {
  ------------------
  |  Branch (614:18): [True: 0, False: 9.59k]
  ------------------
  615|      0|		plugin_t *plugin = (plugin_t *) wget_vector_get(plugin_list, i);
  616|      0|		plugin_priv_t *priv = (plugin_priv_t *) plugin;
  617|      0|		if (priv->finalizer)
  ------------------
  |  Branch (617:7): [True: 0, False: 0]
  ------------------
  618|      0|			priv->finalizer((wget_plugin *) plugin, exitcode);
  619|      0|	}
  620|  9.59k|	wget_vector_free(&plugin_list);
  621|  9.59k|	wget_stringmap_free(&plugin_name_index);
  622|  9.59k|	wget_vector_free(&search_paths);
  623|       |
  624|  9.59k|	initialized = 0;
  625|  9.59k|}
plugin.c:split_string:
   39|    636|{
   40|    636|	const char *ptr, *pmark;
   41|       |
   42|  8.44k|	for (pmark = ptr = str; *ptr; pmark = ptr + 1) {
  ------------------
  |  Branch (42:26): [True: 7.81k, False: 636]
  ------------------
   43|  7.81k|		if ((ptr = strchrnul(pmark, separator)) > pmark)
  ------------------
  |  Branch (43:7): [True: 7.38k, False: 426]
  ------------------
   44|  7.38k|			wget_vector_add(v, wget_strmemdup(pmark, ptr - pmark));
   45|  7.81k|	}
   46|    636|}
plugin.c:load_plugin:
  273|    109|{
  274|    109|	size_t name_len;
  275|    109|	dl_file_t *dm;
  276|    109|	plugin_t *plugin;
  277|    109|	plugin_priv_t *priv;
  278|    109|	wget_plugin_initializer_fn *init_fn;
  279|       |
  280|    109|	name_len = strlen(name);
  281|       |
  282|       |	// Open object file
  283|    109|	dm = dl_file_open(path, e);
  284|    109|	if (! dm)
  ------------------
  |  Branch (284:6): [True: 109, False: 0]
  ------------------
  285|    109|		return NULL;
  286|       |
  287|       |	// Create plugin object
  288|      0|	plugin = wget_malloc(sizeof(plugin_priv_t) + name_len + 1);
  289|       |
  290|       |	// Initialize private members
  291|      0|	priv = (plugin_priv_t *) plugin;
  292|      0|	priv->finalizer = NULL;
  293|      0|	priv->argp = NULL;
  294|      0|	priv->url_filter = NULL;
  295|      0|	priv->post_processor = NULL;
  296|      0|	wget_strscpy(priv->name_buf, name, name_len + 1);
  297|       |
  298|       |	// Initialize public members
  299|      0|	plugin->parent.plugin_data = NULL;
  300|      0|	plugin->parent.vtable = &vtable;
  301|      0|	plugin->name = priv->name_buf;
  302|      0|	plugin->dm = dm;
  303|       |
  304|       |	// Call initializer
  305|      0|	*((void **)(&init_fn)) = dl_file_lookup(dm, "wget_plugin_initializer", e);
  306|      0|	if (! init_fn) {
  ------------------
  |  Branch (306:6): [True: 0, False: 0]
  ------------------
  307|      0|		plugin_free(plugin);
  308|      0|		return NULL;
  309|      0|	}
  310|      0|	if (init_fn((wget_plugin *) plugin) != 0) {
  ------------------
  |  Branch (310:6): [True: 0, False: 0]
  ------------------
  311|      0|		dl_error_set(e, "Plugin failed to initialize");
  312|      0|		plugin_free(plugin);
  313|      0|		return NULL;
  314|      0|	}
  315|       |
  316|       |	// Add to plugin list
  317|      0|	wget_vector_add(plugin_list, plugin);
  318|       |
  319|       |	// Add to map
  320|      0|	wget_stringmap_put(plugin_name_index, plugin->name, plugin);
  321|       |
  322|      0|	return plugin;
  323|      0|}

server_stats_init:
  169|      8|{
  170|      8|	wget_thread_mutex_init(&mutex);
  171|       |
  172|      8|	hosts = wget_hashmap_create(16, (wget_hashmap_hash_fn *) host_hash, (wget_hashmap_compare_fn *) host_compare);
  173|      8|	wget_hashmap_set_key_destructor(hosts, (wget_hashmap_key_destructor *) free_host_entry);
  174|       |
  175|      8|	fp = fpout;
  176|       |
  177|      8|	wget_server_set_stats_callback(server_stats_add);
  178|      8|}
server_stats_exit:
  181|      8|{
  182|       |	// We don't need mutex locking here - this function is called on exit when all threads have ceased.
  183|      8|	wget_hashmap_free(&hosts);
  184|      8|	wget_thread_mutex_destroy(&mutex);
  185|      8|}

site_stats_init:
   90|     15|{
   91|     15|	wget_thread_mutex_init(&mutex);
   92|       |
   93|     15|	data = wget_vector_create(8, NULL);
   94|     15|	wget_vector_set_destructor(data, free_stats);
   95|       |
   96|     15|	fp = fpout;
   97|     15|}
site_stats_exit:
  100|     15|{
  101|     15|	wget_stringmap_free(&docs);
  102|       |
  103|     15|	wget_vector_free(&data);
  104|     15|	wget_thread_mutex_destroy(&mutex);
  105|     15|}

enable_testing:
   28|  9.59k|void enable_testing(void) { testing = true; }

mkdir_path:
   36|  9.59k|{
   37|  9.59k|	const char *p1;
   38|  9.59k|	char *p2, *fname;
   39|  9.59k|	char buf[1024];
   40|       |
   41|  9.59k|	fname = wget_strmemcpy_a(buf, sizeof(buf), _fname, strlen(_fname));
   42|       |
   43|  38.3k|	for (p1 = fname + 1; *p1 && (p2 = strchr(p1, '/')); p1 = p2 + 1) {
  ------------------
  |  Branch (43:23): [True: 38.3k, False: 0]
  |  Branch (43:30): [True: 28.7k, False: 9.59k]
  ------------------
   44|  28.7k|		int rc;
   45|  28.7k|		*p2 = 0; // replace path separator
   46|       |
   47|       |		// relative paths should have been normalized earlier,
   48|       |		// but for security reasons, don't trust myself...
   49|  28.7k|		if (*p1 == '.' && p1[1] == '.')
  ------------------
  |  Branch (49:7): [True: 9.59k, False: 19.1k]
  |  Branch (49:21): [True: 0, False: 9.59k]
  ------------------
   50|      0|			error_printf_exit(_("Internal error: Unexpected relative path: '%s'\n"), fname);
  ------------------
  |  |   56|      0|#define error_printf_exit  wget_error_printf_exit
  ------------------
              			error_printf_exit(_("Internal error: Unexpected relative path: '%s'\n"), fname);
  ------------------
  |  |   48|      0|#	define _(STRING) gettext(STRING)
  ------------------
   51|       |
   52|  28.7k|		rc = mkdir(fname, 0755);
   53|       |
   54|  28.7k|		if (rc < 0 && errno != EEXIST)
  ------------------
  |  Branch (54:7): [True: 28.7k, False: 2]
  |  Branch (54:17): [True: 0, False: 28.7k]
  ------------------
   55|      0|			debug_printf("mkdir(%s)=%d errno=%d\n", fname, rc, errno);
  ------------------
  |  |   57|      0|#define debug_printf wget_debug_printf
  ------------------
   56|       |
   57|  28.7k|		if (rc) {
  ------------------
  |  Branch (57:7): [True: 28.7k, False: 2]
  ------------------
   58|  28.7k|			struct stat st;
   59|       |
   60|  28.7k|			if (errno == EEXIST && stat(fname, &st) == 0 && (st.st_mode & S_IFMT) == S_IFREG) {
  ------------------
  |  Branch (60:8): [True: 28.7k, False: 0]
  |  Branch (60:27): [True: 28.7k, False: 0]
  |  Branch (60:52): [True: 0, False: 28.7k]
  ------------------
   61|       |				// we have a file in the way... move it away and retry
   62|      0|				int renamed = 0;
   63|       |
   64|      0|				for (int fnum = 1; fnum <= 999 && !renamed; fnum++) {
  ------------------
  |  Branch (64:24): [True: 0, False: 0]
  |  Branch (64:39): [True: 0, False: 0]
  ------------------
   65|      0|					char tmp[1024], *dst = tmp;
   66|       |
   67|      0|					if (wget_snprintf(tmp, sizeof(tmp), "%s.%d", fname, fnum) >= sizeof(tmp)) {
  ------------------
  |  Branch (67:10): [True: 0, False: 0]
  ------------------
   68|      0|						dst = wget_aprintf("%s.%d", fname, fnum);
   69|      0|					}
   70|       |
   71|      0|					if (access(dst, F_OK) != 0 && rename(fname, dst) == 0)
  ------------------
  |  Branch (71:10): [True: 0, False: 0]
  |  Branch (71:36): [True: 0, False: 0]
  ------------------
   72|      0|						renamed = 1;
   73|       |
   74|      0|					if (dst != tmp)
  ------------------
  |  Branch (74:10): [True: 0, False: 0]
  ------------------
   75|      0|						xfree(dst);
  ------------------
  |  |   61|      0|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 0, False: 0]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
   76|      0|				}
   77|       |
   78|      0|				if (renamed) {
  ------------------
  |  Branch (78:9): [True: 0, False: 0]
  ------------------
   79|      0|					rc = mkdir(fname, 0755);
   80|       |
   81|      0|					if (rc) {
  ------------------
  |  Branch (81:10): [True: 0, False: 0]
  ------------------
   82|      0|						error_printf(_("Failed to make directory '%s' (errno=%d)\n"), fname, errno);
  ------------------
  |  |   55|      0|#define error_printf  wget_error_printf
  ------------------
              						error_printf(_("Failed to make directory '%s' (errno=%d)\n"), fname, errno);
  ------------------
  |  |   48|      0|#	define _(STRING) gettext(STRING)
  ------------------
   83|      0|						*p2 = '/'; // restore path separator
   84|      0|						break;
   85|      0|					}
   86|      0|				} else
   87|      0|					error_printf(_("Failed to rename '%s' (errno=%d)\n"), fname, errno);
  ------------------
  |  |   55|      0|#define error_printf  wget_error_printf
  ------------------
              					error_printf(_("Failed to rename '%s' (errno=%d)\n"), fname, errno);
  ------------------
  |  |   48|      0|#	define _(STRING) gettext(STRING)
  ------------------
   88|  28.7k|			} else if (errno != EEXIST) {
  ------------------
  |  Branch (88:15): [True: 0, False: 28.7k]
  ------------------
   89|      0|				error_printf(_("Failed to make directory '%s' (errno=%d)\n"), fname, errno);
  ------------------
  |  |   55|      0|#define error_printf  wget_error_printf
  ------------------
              				error_printf(_("Failed to make directory '%s' (errno=%d)\n"), fname, errno);
  ------------------
  |  |   48|      0|#	define _(STRING) gettext(STRING)
  ------------------
   90|      0|				*p2 = '/'; // restore path separator
   91|      0|				break;
   92|      0|			}
   93|  28.7k|		} else debug_printf("created dir %s\n", fname);
  ------------------
  |  |   57|      2|#define debug_printf wget_debug_printf
  ------------------
   94|       |
   95|  28.7k|		*p2 = '/'; // restore path separator
   96|  28.7k|	}
   97|       |
   98|  9.59k|	if (fname != buf)
  ------------------
  |  Branch (98:6): [True: 0, False: 9.59k]
  ------------------
   99|      0|		xfree(fname);
  ------------------
  |  |   61|      0|#define xfree(a) do { if (a) { wget_free((void *)(a)); a=NULL; } } while (0)
  |  |  ------------------
  |  |  |  Branch (61:27): [True: 0, False: 0]
  |  |  |  Branch (61:75): [Folded - Ignored]
  |  |  ------------------
  ------------------
  100|       |
  101|       |	// If the path does not represent a file, we want to also create the
  102|       |	// directory for the last part
  103|  9.59k|	if (!is_file) {
  ------------------
  |  Branch (103:6): [True: 9.59k, False: 0]
  ------------------
  104|  9.59k|		int rc = mkdir(_fname, 0755);
  105|  9.59k|		if (rc < 0 && errno != EEXIST)
  ------------------
  |  Branch (105:7): [True: 9.59k, False: 1]
  |  Branch (105:17): [True: 0, False: 9.59k]
  ------------------
  106|      0|			debug_printf("mkdir(%s)=%d errno=%d\n", _fname, rc, errno);
  ------------------
  |  |   57|      0|#define debug_printf wget_debug_printf
  ------------------
  107|  9.59k|	}
  108|  9.59k|}
shell_expand:
  112|  24.3k|{
  113|  24.3k|	char *expanded_str = NULL;
  114|       |
  115|  24.3k|	if (*fname == '~') {
  ------------------
  |  Branch (115:6): [True: 3.06k, False: 21.3k]
  ------------------
  116|  3.06k|		char *slash = strchrnul(fname, '/');
  117|  3.06k|		expanded_str = wget_strnglob(fname, slash - fname, GLOB_TILDE | GLOB_ONLYDIR | GLOB_NOCHECK);
  118|  3.06k|	}
  119|       |
  120|       |	// Either the string does not start with a "~", or the glob expansion
  121|       |	// failed. In both cases, return the original string back
  122|  24.3k|	return expanded_str ? expanded_str : wget_strdup(fname);
  ------------------
  |  Branch (122:9): [True: 3.06k, False: 21.3k]
  ------------------
  123|  24.3k|}

options.c:dl_error_init:
   37|    234|{
   38|    234|	e->msg = NULL;
   39|    234|}
options.c:dl_error_get_msg:
   51|    234|{
   52|    234|	return e->msg;
   53|    234|}

